xamarin - 在 Xamarin.iOS、iOS 13 中获取连接的 wifi 网络的 SSID
问题描述
从 iOS 12 到 13 后,我无法再获取连接的 wifi 网络的 SSID。
我尝试了这个问题中提出的 iOS 13 解决方案, 但没有结果。
我之前成功的 iOS 12 代码(此外,现在不推荐使用“CaptiveNetwork”):
if (CaptiveNetwork.TryGetSupportedInterfaces(out string[] supportedInterfaces) == StatusCode.OK)
{
foreach (var item in supportedInterfaces)
{
if (CaptiveNetwork.TryCopyCurrentNetworkInfo(item, out NSDictionary info) == StatusCode.OK)
{
var ssid = info[CaptiveNetwork.NetworkInfoKeySSID].ToString();
return ssid;
}
}
}
有什么建议吗?
解决方案
iOS 13 更新:Apple 宣布在 iOS 13 中,CNCopyCurrentNetworkInfo API 将不再返回有效的 Wi-Fi SSID 和 BSSID 信息。
如果您的应用程序需要有效的 Wi-Fi SSID 和 BSSID 信息才能运行,您可以执行以下操作: · 对于附件设置应用程序,使用 NEHotSpotConfiguration API,它现在可以选择传递您的应用程序期望连接的 SSID 热点的前缀至。· 对于其他类型的应用,使用 CoreLocation API 请求用户同意访问位置信息。
因此,我通过以下方式更新了上述解决方案:
将此密钥添加到您的 info.plist:
<key>NSLocationWhenInUseUsageDescription</key>
<string>Your Description</string>
使用 CoreLocation API 请求用户同意访问位置信息。
private void GetLocationConsent()
{
var manager = new CLLocationManager();
manager.AuthorizationChanged += (sender, args) => {
Console.WriteLine("Authorization changed to: {0}", args.Status);
};
if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
manager.RequestWhenInUseAuthorization();
}
在调用“CaptiveNetwork”之前调用 GetLocationConsent() 函数。
推荐阅读
- javascript - 在达到像素宽度后阻止 Textarea 输入
- javascript - 快捷键不起作用 ctrl + shift + numpad1
- c++ - 使用友元函数重载的 C++ 运算符。尝试添加多个对象失败
- javascript - 使用 lodash 对对象进行分组
- xamarin.forms - Microsoft Azure 存储数据移动库以及 xamarin 表单
- ios - 回到 UIViewController 不会触发 segue
- c# - 我可以帮助 C# 编译器推断这种类型吗?
- c - 如何在 CLion 中设置断点条件
- javascript - 更改 js 函数参数的引用
- sql - 如何不重复使用 SQL where 子句