6

有谁知道如何确定特定时刻的活动网络类型:2G3GWiFi

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

4

3 回答 3

14

SCNetworkReachability界面可以帮助您。基本上,您创建一个所谓的可达性引用,然后调用SCNetworkReachabilityGetFlags它以获取有关连接的信息。

返回的标志包括kSCNetworkReachabilityFlagsIsWWAN,它告诉您是通过 WiFi 还是蜂窝网络连接。不过,AFAIK 不能用来区分 2G 和 3G。

有关实现,请参阅 Apple 的Reachability 示例应用程序。在大多数情况下,您应该能够直接Reachability在项目中使用包含的类。

于 2009-10-28T12:50:54.123 回答
3

前往 Apple Developer 网站,下载一个名为“Reachability”的示例项目

它提供了您想要做什么的示例。

值得注意的是,我不相信你能分辨出 EDGE(2G) 和 3G 连接之间的区别。它是 WiFi 或 WWAN。

于 2009-10-28T12:59:41.973 回答
2

这是快速查找设备网络模式(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")

                }
            }
        }
    }
于 2019-01-04T13:32:47.480 回答