質問

特定の瞬間にアクティブなネットワークタイプを判断する方法を知っている人はいますか: 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")

                }
            }
        }
    }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top