Тип активной сети iPhone (2G, 3G, WiFi) - PullRequest
6 голосов
/ 28 октября 2009

Кто-нибудь знает, как определить активный тип сети в конкретный момент: 2G , 3G или WiFi .

Например, в определенный момент может быть включено 3G , но используемый тип сети может быть 2G .

Ответы [ 3 ]

14 голосов
/ 28 октября 2009

Интерфейс SCNetworkReachability может помочь вам в этом. По сути, вы создаете так называемую ссылку на достижимость и затем вызываете SCNetworkReachabilityGetFlags, чтобы получить информацию о соединении.

Возвращенные флаги включают kSCNetworkReachabilityFlagsIsWWAN, который сообщает вам, подключены ли вы через WiFi или сотовую сеть. AFAIK, однако, он не может быть использован для определения разницы между 2G и 3G.

См. Пример приложения от Apple *1009* для реализации. В большинстве случаев вы должны иметь возможность напрямую использовать включенный класс Reachability в вашем проекте.

3 голосов
/ 28 октября 2009

Перейдите на сайт Apple Developer и загрузите пример проекта под названием «Reachability»

Это пример того, что вы хотели бы сделать.

Стоит отметить, что я не верю, что вы можете определить разницу между EDGE (2G) и 3G-соединением. Это либо WiFi, либо WWAN.

2 голосов
/ 04 января 2019

Это способ быстро найти сетевой режим (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")

                }
            }
        }
    }
...