iPhoneアクティブネットワークタイプ(2G、3G、WiFi)
-
06-07-2019 - |
質問
特定の瞬間にアクティブなネットワークタイプを判断する方法を知っている人はいますか: 2G 、 3G 、または WiFi 。
たとえば、特定の時点で 3G を有効にできますが、使用されるネットワークタイプは 2G になります。
解決
SCNetworkReachability
インターフェースはこれを支援します。基本的に、いわゆる到達可能性参照を作成し、その上で SCNetworkReachabilityGetFlags
を呼び出して接続に関する情報を取得します。
返されるフラグには、 kSCNetworkReachabilityFlagsIsWWAN
が含まれます。これは、WiFi経由で接続しているか、セルネットワーク経由で接続しているかを示します。ただし、2Gと3Gの違いを伝えるために使用することはできません。
実装については、Appleの Reachabilityサンプルアプリをご覧ください。ほとんどの場合、プロジェクトに含まれている Reachability
クラスを直接使用できるはずです。
他のヒント
Apple Developerサイトにアクセスして、「Reachability」というサンプルプロジェクトをダウンロードします
やりたいことの例です。
EDGE(2G)と3G接続の違いがわかるとは思わないことに注意してください。 WiFiまたはWWANのいずれかです。
これは、デバイスのネットワークモード(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