观察 WiFi / 3G 变化
Observe WiFi / 3G changes
是否可以观察用户何时在 WiFi 和蜂窝数据 (3G/4G) 之间切换?
可能是 Reachability 里的东西,但我不知道是什么。
是 可达性为您提供连接的网络类型。它提供 3 种不同的状态 - 未连接到互联网、连接到 Wifi、连接到移动数据。
NetworkStatus status = [reachability currentReachabilityStatus];
if(status == NotReachable)
{
//No Connectivity to Internet
}
else if (status == ReachableViaWiFi)
{
//Connected via WiFi
}
else if (status == ReachableViaWWAN)
{
//Connected via Mobile Data
}
我认为最简单的方法是导入 CoreTelephony 并观察 CTRadioAccessTechnologyDidChangeNotification,然后像这样切换:
let networkInfo = CTTelephonyNetworkInfo()
let radio = networkInfo.currentRadioAccessTechnology
guard let currentRadio = radio else {
print("No radio info available")
return
}
switch currentRadio {
case CTRadioAccessTechnologyLTE,
CTRadioAccessTechnologyHSDPA: //3.5G "T-Mobile 4G"
print("This is 4G / LTE")
case CTRadioAccessTechnologyeHRPD, //3.5G "Verizon 3G"
CTRadioAccessTechnologyHSUPA,
CTRadioAccessTechnologyWCDMA,
CTRadioAccessTechnologyCDMAEVDORev0,
CTRadioAccessTechnologyCDMAEVDORevA,
CTRadioAccessTechnologyCDMAEVDORevB:
print("This is 3G")
case CTRadioAccessTechnologyGPRS,
CTRadioAccessTechnologyCDMA1x
CTRadioAccessTechnologyEdge:
print("This is 2G")
default:
print("Unknown cellular network type")
}
如果您在侦听该通知的同时还使用标准可达性,则可以使用此开关获取手机网络类型。您将需要 currentReachabilityStatus 来独立检查 WiFi 连接。据我所知,在 Swift 中,您需要设置一个桥接头以使用 Apple 的可达性 class,但在 github 上也有 Swift 实现可用。
是否可以观察用户何时在 WiFi 和蜂窝数据 (3G/4G) 之间切换?
可能是 Reachability 里的东西,但我不知道是什么。
是 可达性为您提供连接的网络类型。它提供 3 种不同的状态 - 未连接到互联网、连接到 Wifi、连接到移动数据。
NetworkStatus status = [reachability currentReachabilityStatus];
if(status == NotReachable)
{
//No Connectivity to Internet
}
else if (status == ReachableViaWiFi)
{
//Connected via WiFi
}
else if (status == ReachableViaWWAN)
{
//Connected via Mobile Data
}
我认为最简单的方法是导入 CoreTelephony 并观察 CTRadioAccessTechnologyDidChangeNotification,然后像这样切换:
let networkInfo = CTTelephonyNetworkInfo()
let radio = networkInfo.currentRadioAccessTechnology
guard let currentRadio = radio else {
print("No radio info available")
return
}
switch currentRadio {
case CTRadioAccessTechnologyLTE,
CTRadioAccessTechnologyHSDPA: //3.5G "T-Mobile 4G"
print("This is 4G / LTE")
case CTRadioAccessTechnologyeHRPD, //3.5G "Verizon 3G"
CTRadioAccessTechnologyHSUPA,
CTRadioAccessTechnologyWCDMA,
CTRadioAccessTechnologyCDMAEVDORev0,
CTRadioAccessTechnologyCDMAEVDORevA,
CTRadioAccessTechnologyCDMAEVDORevB:
print("This is 3G")
case CTRadioAccessTechnologyGPRS,
CTRadioAccessTechnologyCDMA1x
CTRadioAccessTechnologyEdge:
print("This is 2G")
default:
print("Unknown cellular network type")
}
如果您在侦听该通知的同时还使用标准可达性,则可以使用此开关获取手机网络类型。您将需要 currentReachabilityStatus 来独立检查 WiFi 连接。据我所知,在 Swift 中,您需要设置一个桥接头以使用 Apple 的可达性 class,但在 github 上也有 Swift 实现可用。