Tipo di rete attiva iPhone (2G, 3G, WiFi)
-
06-07-2019 - |
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 .
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")
}
}
}
}