iPhone主动网络类型(2G,3G,WiFi)
-
06-07-2019 - |
题
有谁知道如何确定特定时刻的有效网络类型: 2G , 3G 或 WiFi 。
例如,在特定时刻可以启用 3G ,但使用的网络类型可能是 2G 。
解决方案
SCNetworkReachability
界面可以帮助您。基本上,您创建一个所谓的可达性引用,然后在其上调用 SCNetworkReachabilityGetFlags
以获取有关连接的信息。
返回的标志包括 kSCNetworkReachabilityFlagsIsWWAN
,它告诉您是通过WiFi还是通过蜂窝网络连接。但AFAIK不能用来说明2G和3G之间的区别。
有关实施,请参阅Apple的可访问性示例应用。在大多数情况下,您应该能够直接在项目中使用包含的 Reachability
类。
其他提示
转到Apple Developer网站,下载名为“Reachability”的示例项目
它提供了您想要做的事情的示例。
值得注意的是,我不相信你可以区分EDGE(2G)和3G连接。它可以是WiFi或WWAN。
这是在swift中找到设备的网络模式(2G,3G,4G或wifi)的方法。
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")
}
}
}
}
不隶属于 StackOverflow