2016-12-16 21 views
5

WiFi asistanının etkin olup olmadığını kontrol etmeye çalışıyorum. Bazı verileri almak için erişim noktama bağlandığımda ve kötü bağlantım olduğunda hücresel verilerim kullanıldığında ve erişim noktam ile etkileşimde bulunduğumda sorun yaşıyorum. Bu seçeneğin etkin olup olmadığını kontrol etmenin bir yolu var mı?iOS WiFi desteğinin etkin olup olmadığını kontrol edin

+0

Kablosuz bağlantı etkinleştirildi mi, doğru değil mi? –

+0

Hayır, Ayarlar -> Hücresel -> WiFi Assist seçeneğinin etkin olup olmadığını kontrol etmek istiyorum – Flipper

cevap

2

Tamam, sanırım biraz yardımcı olabilirim. check SCNetworkReachabilityFlags'a ihtiyacınız var, düşündüğüm için bayrakların belirli bir kombinasyonu olacak. Wi-Fi ve Hücresel'i kullandığınızı gösteren hangi bayrak birleşimini destekleyen belgeleri bulamadım, bu ayarı doğrudan kontrol etmenizi sağlayan belgeleri de bulamadım.

Önceki deneyimlere dayanmaktadır Apple'ın bu ayarı doğrudan kontrol etmeniz için bir yolu yoktur.

Yani ... Bizi başlatmak için küçük bir kod var mı?

public enum InternetStatus { 
    case notReachable 
    case reachableViaWWAN 
    case reachableViaWiFi 
    case wifiAssist 
} 

Ve bir değişken, istediğiniz bir uzantıyı tanımlayabilirsiniz. (Belki URLSession?)

static public var internetStatus: InternetStatus { 

    var zeroAddress = sockaddr_in() 
    zeroAddress.sin_len = UInt8(MemoryLayout<sockaddr_in>.size) 
    zeroAddress.sin_family = sa_family_t(AF_INET) 

    guard let defaultRouteReachability = withUnsafePointer(to: &zeroAddress, { 
     $0.withMemoryRebound(to: sockaddr.self, capacity: 1) { 
      SCNetworkReachabilityCreateWithAddress(nil, $0) 
     } 
    }) else { 
     return .notReachable 
    } 

    var flags: SCNetworkReachabilityFlags = [] 

    if flags.contains(.connectionOnDemand) { 
     print("Connection On Demand") 
    } 

    if flags.contains(.connectionAutomatic) { 
     print("Connection Automatic") 
    } 

    if flags.contains(.connectionOnTraffic) { 
     print("Connection On Traffic") 
    } 

    if flags.contains(.connectionRequired) { 
     print("Connection Required") 
    } 

    if flags.contains(.interventionRequired) { 
     print("Intervention Required") 
    } 

    if flags.contains(.isDirect) { 
     print("isDirect") 
    } 

    if flags.contains(.isLocalAddress) { 
     print("Local Address") 
    } 

    if flags.contains(.isWWAN) { 
     print("WWAN") 
    } 

    if flags.contains(.reachable) { 
     print("Reachable") 
    } 

    if flags.contains(.transientConnection) { 
     print("Transient Connection") 
    } 


    if !SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags) { 
     return .notReachable 
    } 

    if flags.contains(.reachable) == false { 
     // The target host is not reachable. 
     return .notReachable 
    } 
    else if flags.contains(.isWWAN) == true { 
     // WWAN connections are OK if the calling application is using the CFNetwork APIs. 
     return .reachableViaWWAN 
    } 
    else if flags.contains(.connectionRequired) == false { 
     // If the target host is reachable and no connection is required then we'll assume that you're on Wi-Fi... 
     return .reachableViaWiFi 
    }else if flags.contains(.connectionRequired) && flags.contains(.isWWAN) { 
     // Not sure here, maybe Wi-Fi assist is currently being utilized? Will need to test. 
     return .wifiAssist 
    }else if (flags.contains(.connectionOnDemand) == true || flags.contains(.connectionOnTraffic) == true) && flags.contains(.interventionRequired) == false { 
     // The connection is on-demand (or on-traffic) if the calling application is using the CFSocketStream or higher APIs and no [user] intervention is needed 
     return .reachableViaWiFi 
    } 
    else { 
     return .notReachable 
    } 
} 

Wi-Fi etkin yardımcı ve bayrakları gözlemlemek biliyorum nerede hile bir ortamda hata ayıklama olacaktır. Ya da benden daha zeki ol ve ne olduklarını bil. Birisi işaret ederse ya da bayrakların doğru kombinasyonunu bulursam bu cevabı güncelleyeceğim.

+0

Teşekkürler Jon, bu yardımcı oldu. Ekibimdeki bir kişi bunu bir rehber olarak kullanarak çalışan bir şey elde edebildi. Umarım Apple bu konuda bazı resmi rehberlik sağlar. Bu arada, Radar sorunu ... –

+0

@NicholasHart Duyduğuma sevindim! Kodu göndermeye, gönderiyi düzenlemeye veya düzenlemeleri göndermeye özen göstererek, bu sayede tam bir yanıt verebilir miyiz? –

İlgili konular