我需要获取我当前连接的网络的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 中实现这个。
我该怎么做?
您可以使用DependencyService。
DependencyService 类是一个服务定位器,使 Xamarin.Forms 应用程序能够从共享代码调用本机平台功能。
1° 创建一个公共接口(出于组织考虑,可能在
Mobile > Services > IGetSSID
下)
public interface IGetSSID
{
string GetSSID();
}
2° 创建 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";
}
}
}
}
3° 然后在您的表单中您将获得如下所示的 SSID:
var ssid = DependencyService.Get<IGetSSID>().GetSSID();
注意:不要忘记在 Android Manifest 中添加此权限
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
所需权限: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;
}
}
}
有人有这个问题的iOS解决方案吗?