iOS检查WiFi协助是否启用
我试图检查WiFi协助是否启用。当我连接到接入点以获取某些数据时,出现问题,而当我连接不良时,我的蜂窝数据会被使用,并会干扰我的接入点。有没有办法检查这个选项是否被启用?iOS检查WiFi协助是否启用
好吧,我想我可以帮助一点。您需要check SCNetworkReachabilityFlags
,因为我认为这将是标志的特定组合。我没有找到支持多种标志组合的文档,说明您正在使用WI-FI和Cellular,我也没有找到允许您直接检查该设置的文档。
基于以前的经验苹果可能没有办法直接检查该设置。
所以...这是一个让我们开始的小代码?
public enum InternetStatus {
case notReachable
case reachableViaWWAN
case reachableViaWiFi
case wifiAssist
}
而且您可以在您选择的扩展名中定义一个变量。 (也许URLSession
?)
static public var internetStatus: InternetStatus {
var zeroAddress = sockaddr_in()
zeroAddress.sin_len = UInt8(MemoryLayout<sockaddr_in>.size)
zeroAddress.sin_family = sa_family_t(AF_INET)
guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, {
$0.withMemoryRebound(to: sockaddr.self, capacity: 1) {
SCNetworkReachabilityCreateWithAddress(nil, $0)
}
}) else {
return .notReachable
}
var flags: SCNetworkReachabilityFlags = []
if flags.contains(.connectionOnDemand) {
print("Connection On Demand")
}
if flags.contains(.connectionAutomatic) {
print("Connection Automatic")
}
if flags.contains(.connectionOnTraffic) {
print("Connection On Traffic")
}
if flags.contains(.connectionRequired) {
print("Connection Required")
}
if flags.contains(.interventionRequired) {
print("Intervention Required")
}
if flags.contains(.isDirect) {
print("isDirect")
}
if flags.contains(.isLocalAddress) {
print("Local Address")
}
if flags.contains(.isWWAN) {
print("WWAN")
}
if flags.contains(.reachable) {
print("Reachable")
}
if flags.contains(.transientConnection) {
print("Transient Connection")
}
if !SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) {
return .notReachable
}
if flags.contains(.reachable) == false {
// The target host is not reachable.
return .notReachable
}
else if flags.contains(.isWWAN) == true {
// WWAN connections are OK if the calling application is using the CFNetwork APIs.
return .reachableViaWWAN
}
else if flags.contains(.connectionRequired) == false {
// If the target host is reachable and no connection is required then we'll assume that you're on Wi-Fi...
return .reachableViaWiFi
}else if flags.contains(.connectionRequired) && flags.contains(.isWWAN) {
// Not sure here, maybe Wi-Fi assist is currently being utilized? Will need to test.
return .wifiAssist
}else if (flags.contains(.connectionOnDemand) == true || flags.contains(.connectionOnTraffic) == true) && flags.contains(.interventionRequired) == false {
// The connection is on-demand (or on-traffic) if the calling application is using the CFSocketStream or higher APIs and no [user] intervention is needed
return .reachableViaWiFi
}
else {
return .notReachable
}
}
的诀窍是在设置调试,你知道的Wi-Fi辅助激活并观察标志。或者比我聪明,只知道他们是什么。如果有人指出,我会更新这个答案,或者我找出正确的标志组合。
感谢乔恩,这是有帮助的。我的团队中有人能够以此为指导,开展工作。我希望苹果对此提供一些官方指导。在此期间,雷达问题提交... –
@NicholasHart很高兴听到!注意发布代码,编辑我的帖子,或发送给我编辑,以便我们可以完成这个完整的答案? –
你想检查wifi已启用或不正确? –
不,我想检查设置 - >蜂窝 - > WiFi协助是否启用 – Flipper