Domanda

Qualcuno sa come determinare il tipo di rete attiva nel momento specifico: 2G , 3G o WiFi .

Ad esempio, in un momento specifico potrebbe essere abilitato 3G , ma il tipo di rete utilizzato potrebbe essere 2G .

È stato utile?

Soluzione

L'interfaccia SCNetworkReachability può aiutarti in questo. Fondamentalmente, si crea un cosiddetto riferimento di raggiungibilità e quindi si chiama SCNetworkReachabilityGetFlags per ottenere informazioni sulla connessione.

I flag restituiti includono kSCNetworkReachabilityFlagsIsWWAN , che ti dice se sei connesso tramite WiFi o rete cellulare. AFAIK, tuttavia, non può essere utilizzato per distinguere tra 2G e 3G.

Vedi App di esempio di raggiungibilità di Apple per un'implementazione. Nella maggior parte dei casi, dovresti essere in grado di utilizzare direttamente la classe Raggiungibilità inclusa nel tuo progetto.

Altri suggerimenti

Vai al sito degli sviluppatori Apple e scarica un progetto di esempio chiamato " Raggiungibilità "

Fornisce un esempio di ciò che vorresti fare.

Vale la pena notare che non credo che tu possa dire la differenza tra EDGE (2G) e una connessione 3G. È WiFi o WWAN.

  

Questo è il modo per trovare rapidamente la modalità di rete (2G, 3G, 4G o wifi) del tuo dispositivo.

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")

                }
            }
        }
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top