如何在Xamarin.Forms中获取已连接的SSID?

问题描述 投票:0回答:3

我需要获取我当前连接的网络的SSID

这是我用来在 Xamarin.Android 中查找 SSID 的代码

WifiManager wifiManager = (WifiManager)(Application.Context.GetSystemService(WifiService));

if (wifiManager != null)
{
    var ssid =  wifiManager.ConnectionInfo.SSID;
}
else
{
    var str =  "WiFiManager is NULL";
}

但是我需要在 Xamarin.Forms 中实现这个。

我该怎么做?

c# xamarin.forms xamarin.android wifi ssid
3个回答
5
投票

您可以使用DependencyService

DependencyService 类是一个服务定位器,使 Xamarin.Forms 应用程序能够从共享代码调用本机平台功能。

创建一个公共接口(出于组织考虑,可能在

Mobile > Services > IGetSSID
下)

public interface IGetSSID
{
    string GetSSID();
}

创建 Android 实现

[assembly: Dependency(typeof(GetSSIDAndroid))]
namespace yournamespace
{
    public class GetSSIDAndroid : IGetSSID
    {
        public string GetSSID()
        {
            WifiManager wifiManager = (WifiManager)(Android.App.Application.Context.GetSystemService(Context.WifiService));

            if (wifiManager != null && !string.IsNullOrEmpty(wifiManager.ConnectionInfo.SSID))
            {
                return wifiManager.ConnectionInfo.SSID;
            }
            else
            {
                return "WiFiManager is NULL";
            }
        }
    }
}

然后在您的表单中您将获得如下所示的 SSID:

var ssid = DependencyService.Get<IGetSSID>().GetSSID();

注意:不要忘记在 Android Manifest 中添加此权限

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

0
投票

获取 SSID 和 BSSID API31 Xamarin C# 示例

所需权限:CHANGE_NETWORK_STATE、ACCESS_FINE_LOCATION

如果API<31 TransportInfo将返回Null

using Android.Content;
using Android.Net;
using Android.Net.Wifi;

protected override void OnStart()
    {
        base.OnStart();

        NetworkRequest request = new NetworkRequest.Builder().AddTransportType(transportType: TransportType.Wifi).Build();
        ConnectivityManager connectivityManager = Android.App.Application.Context.GetSystemService(Context.ConnectivityService) as ConnectivityManager;

        NetworkCallbackFlags flagIncludeLocationInfo = NetworkCallbackFlags.IncludeLocationInfo;
        NetworkCallback networkCallback = new NetworkCallback((int)flagIncludeLocationInfo);
        connectivityManager.RequestNetwork(request, networkCallback);
    }

    private class NetworkCallback : ConnectivityManager.NetworkCallback
    {
        public NetworkCallback(int flags) : base(flags)
        {
        }

        public override void OnCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities)
        {
            base.OnCapabilitiesChanged(network, networkCapabilities);
            WifiInfo wifiInfo = (WifiInfo)networkCapabilities.TransportInfo;

            if (wifiInfo != null)
            {
                string ssid = wifiInfo.SSID.Trim(new char[] {'"', '\"' });
                string bssid = wifiInfo.BSSID;
            }
        }
    }

点击Android API参考.ConnectivityManager.NetworkCallback(int)


-1
投票

有人有这个问题的iOS解决方案吗?

© www.soinside.com 2019 - 2024. All rights reserved.