[英]iPhone active network type (2G, 3G, WiFi)
有誰知道如何確定特定時刻的活動網絡類型: 2G , 3G或WiFi 。
例如,在特定時刻可能啟用3G ,但使用的網絡類型可能是2G 。
SCNetworkReachability
接口可以幫助您。 基本上,您創建一個所謂的可達性引用,然后在其上調用SCNetworkReachabilityGetFlags
以獲取有關連接的信息。
返回的標志包括kSCNetworkReachabilityFlagsIsWWAN
,它告訴您是通過WiFi還是通過蜂窩網絡連接。 但AFAIK不能用來說明2G和3G之間的區別。
有關實施,請參閱Apple的Reachability示例應用程序 。 在大多數情況下,您應該能夠直接在項目中使用包含的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")
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.