iOS 飞行模式下 13 个 wifi ssid
iOS 13 wifi ssid in airplane mode
我目前正在根据从 CNCopyCurrentNetworkInfo 返回的内容更新我的应用程序。我了解 Apple 从 iOS 13 开始就此实施的隐私更改,因此我目前正在更新实施。
这很简单。然而,我 运行 遇到的问题是在应用程序的这一部分内,用户可能处于飞行模式(飞行中的应用程序)。不管 CLLocationManager.authorizationStatus(),即使它是 .notDetermined 然后触发 requestWhenInUseAuthorization() 方法并且一旦用户选择 "Allow Once" 或 "Allow while Using App",我仍然无法获取 Wi-Fi ssid。
static func fetchSSIDInfo() -> String? {
if isSimulator() {
return "wireless"
} else {
if let interfaces: CFArray = CNCopySupportedInterfaces() {
for i in 0..<CFArrayGetCount(interfaces) {
let interfaceName: UnsafeRawPointer = CFArrayGetValueAtIndex(interfaces, i)
let rec = unsafeBitCast(interfaceName, to: AnyObject.self)
// skips this in airplane mode
if let unsafeInterfaceData = CNCopyCurrentNetworkInfo("\(rec)" as CFString) {
if let interfaceData = unsafeInterfaceData as Dictionary? {
let ssid = interfaceData["SSID" as NSObject] as? String
let bssid = interfaceData["BSSID" as NSObject] as? String
if ssid != "Wi-Fi" && bssid != "00:00:00:00:00:00" {
return ssid
} else {
return "invalid"
}
}
}
}
}
}
return nil
}
在上面的代码中,当处于飞行模式时,它实际上跳过了 if let unsafeInterfaceData。当它不处于飞行模式时,它会按预期工作,并且 returns ssid 或无效字符串取决于用户是否允许定位服务。
我的问题是如何才能在飞行模式下运行它?也许我遗漏了什么,但在这一点上不太确定。
在 iOS13 中,可能还有更早的版本(我没有立即可用的版本进行测试),一旦您启用 "Airplane mode,",WiFi 将自动断开连接。
最终用户需要在其设备上主动重新启用 WiFi 才能重新连接,同时仍启用飞行模式。
您的 if
语句没有被执行,可能是因为还没有网络信息。重新启用 WiFi 应该会得到预期的结果。
我目前正在根据从 CNCopyCurrentNetworkInfo 返回的内容更新我的应用程序。我了解 Apple 从 iOS 13 开始就此实施的隐私更改,因此我目前正在更新实施。
这很简单。然而,我 运行 遇到的问题是在应用程序的这一部分内,用户可能处于飞行模式(飞行中的应用程序)。不管 CLLocationManager.authorizationStatus(),即使它是 .notDetermined 然后触发 requestWhenInUseAuthorization() 方法并且一旦用户选择 "Allow Once" 或 "Allow while Using App",我仍然无法获取 Wi-Fi ssid。
static func fetchSSIDInfo() -> String? {
if isSimulator() {
return "wireless"
} else {
if let interfaces: CFArray = CNCopySupportedInterfaces() {
for i in 0..<CFArrayGetCount(interfaces) {
let interfaceName: UnsafeRawPointer = CFArrayGetValueAtIndex(interfaces, i)
let rec = unsafeBitCast(interfaceName, to: AnyObject.self)
// skips this in airplane mode
if let unsafeInterfaceData = CNCopyCurrentNetworkInfo("\(rec)" as CFString) {
if let interfaceData = unsafeInterfaceData as Dictionary? {
let ssid = interfaceData["SSID" as NSObject] as? String
let bssid = interfaceData["BSSID" as NSObject] as? String
if ssid != "Wi-Fi" && bssid != "00:00:00:00:00:00" {
return ssid
} else {
return "invalid"
}
}
}
}
}
}
return nil
}
在上面的代码中,当处于飞行模式时,它实际上跳过了 if let unsafeInterfaceData。当它不处于飞行模式时,它会按预期工作,并且 returns ssid 或无效字符串取决于用户是否允许定位服务。
我的问题是如何才能在飞行模式下运行它?也许我遗漏了什么,但在这一点上不太确定。
在 iOS13 中,可能还有更早的版本(我没有立即可用的版本进行测试),一旦您启用 "Airplane mode,",WiFi 将自动断开连接。
最终用户需要在其设备上主动重新启用 WiFi 才能重新连接,同时仍启用飞行模式。
您的 if
语句没有被执行,可能是因为还没有网络信息。重新启用 WiFi 应该会得到预期的结果。