iPhone的活动网络类型(2G、3G、WiFi)

6

有人知道如何在特定时刻确定活动网络类型吗:2G、3G或WiFi。

例如,在某个特定时刻可能启用了3G,但使用的网络类型可能是2G。

3个回答

14

SCNetworkReachability 接口可以帮助你实现这一点。基本上,你需要创建一个所谓的可达性引用,然后在它上面调用 SCNetworkReachabilityGetFlags 方法来获取有关连接的信息。

返回的标志包括 kSCNetworkReachabilityFlagsIsWWAN,它告诉你是否通过 WiFi 或蜂窝网络连接。据我所知,它不能用于区分 2G 和 3G。

请参阅苹果公司的 可达性示例应用程序 来了解实现方法。在大多数情况下,你应该能够直接使用项目中包含的 Reachability 类。


3

请前往苹果开发者网站,下载名为“Reachability”的示例项目。

这提供了您想要实现的示例。

值得注意的是,我认为您无法区分EDGE(2G)和3G连接。它要么是WiFi,要么是WWAN。


2
这是在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")

                }
            }
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接