Тип активной сети iPhone (2G, 3G, WiFi)
-
06-07-2019 - |
Вопрос
Кто-нибудь знает, как определить активный тип сети в конкретный момент: 2G , 3G или WiFi .
Например, в определенный момент может быть включен 3G , но используемый тип сети может быть 2G .
Решение
Интерфейс SCNetworkReachability
может помочь вам в этом. По сути, вы создаете так называемую ссылку на достижимость, а затем вызываете в ней SCNetworkReachabilityGetFlags
, чтобы получить информацию о соединении.
Возвращаемые флаги включают в себя kSCNetworkReachabilityFlagsIsWWAN
, который сообщает вам, подключены ли вы через WiFi или сотовую сеть. AFAIK, однако, его нельзя использовать для определения разницы между 2G и 3G.
См. пример приложения Reachability для реализации. В большинстве случаев вы должны иметь возможность напрямую использовать включенный класс Reachability
в своем проекте.
Другие советы
Перейдите на сайт Apple Developer и загрузите пример проекта под названием «Reachability»
Это пример того, что вы хотели бы сделать.
Стоит отметить, что я не верю, что вы можете определить разницу между EDGE (2G) и 3G-соединением. Это либо WiFi, либо WWAN.
Это способ быстро найти сетевой режим (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")
}
}
}
}