有人知道如何在特定时刻确定活动网络类型吗:2G、3G或WiFi。
例如,在某个特定时刻可能启用了3G,但使用的网络类型可能是2G。
有人知道如何在特定时刻确定活动网络类型吗:2G、3G或WiFi。
例如,在某个特定时刻可能启用了3G,但使用的网络类型可能是2G。
SCNetworkReachability
接口可以帮助你实现这一点。基本上,你需要创建一个所谓的可达性引用,然后在它上面调用 SCNetworkReachabilityGetFlags
方法来获取有关连接的信息。
返回的标志包括 kSCNetworkReachabilityFlagsIsWWAN
,它告诉你是否通过 WiFi 或蜂窝网络连接。据我所知,它不能用于区分 2G 和 3G。
请参阅苹果公司的 可达性示例应用程序 来了解实现方法。在大多数情况下,你应该能够直接使用项目中包含的 Reachability
类。
请前往苹果开发者网站,下载名为“Reachability”的示例项目。
这提供了您想要实现的示例。
值得注意的是,我认为您无法区分EDGE(2G)和3G连接。它要么是WiFi,要么是WWAN。
if let reachability = Reachability.forInternetConnection() {
reachability.startNotifier()
let status = reachability.currentReachabilityStatus()
if status == .init(0) {
// .NotReachable
print("Not Reachable")
}
else if status == .init(1) {
// .ReachableViaWiFi
print("Reachable Via WiFi")
}
else if status == .init(2) {
// .ReachableViaWWAN
let netInfo = CTTelephonyNetworkInfo()
if let cRAT = netInfo.currentRadioAccessTechnology {
switch cRAT {
case CTRadioAccessTechnologyGPRS,
CTRadioAccessTechnologyEdge,
CTRadioAccessTechnologyCDMA1x:
print("Reachable Via 2G")
do{
try realm.write {
realm.add(ModalDataSaver.singletonClass)
}
}catch
{
print("Error in saving data :- \(error.localizedDescription)")
}
case CTRadioAccessTechnologyWCDMA,
CTRadioAccessTechnologyHSDPA,
CTRadioAccessTechnologyHSUPA,
CTRadioAccessTechnologyCDMAEVDORev0,
CTRadioAccessTechnologyCDMAEVDORevA,
CTRadioAccessTechnologyCDMAEVDORevB,
CTRadioAccessTechnologyeHRPD:
print("Reachable Via 3G")
case CTRadioAccessTechnologyLTE:
print("Reachable Via 4G")
default:
fatalError("error")
}
}
}
}