gpt4 book ai didi

iOS 检查是否启用了 WiFi 辅助

转载 作者:可可西里 更新时间:2023-11-01 03:33:26 28 4
gpt4 key购买 nike

我正在尝试检查是否启用了 WiFi 辅助。当我连接到我的接入点以获取一些数据时,我遇到了问题,当我的连接不佳时,我的蜂窝数据被使用并且它干扰了我的接入点。有什么方法可以检查是否启用了此选项?

最佳答案

好的,我想我可以帮上一点忙。你需要check SCNetworkReachabilityFlags ,我认为,将是标志的特定组合。我找不到支持哪些标志组合表明您正在使用 WI-FI 和蜂窝网络的文档,我也找不到允许您直接检查该设置的文档。

根据以往的经验,Apple 可能无法让您直接检查该设置。

那么...这里有一些让我们开始的代码?

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 辅助处于事件状态并观察标志的设置中进行调试。或者比我聪明,只知道它们是什么。如果有人指出,我会更新这个答案,或者我找出正确的标志组合。

关于iOS 检查是否启用了 WiFi 辅助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41184976/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com