2016-12-16 3 views
5

WiFiアシストが有効になっているかどうかを確認しようとしています。一部のデータを取得するためにアクセスポイントに接続しているときに問題が発生しています。接続が不十分な場合、携帯データが使用され、アクセスポイントが干渉します。このオプションが有効になっているかどうかを確認する方法はありますか?iOS WiFiアシストが有効になっているか確認してください。

+0

あなたは無線LANを有効にするかどうかをチェックしたいですか? –

+0

いいえ、設定 - >携帯電話 - > WiFiアシストのオプションが有効になっているかどうかを確認します。 – Flipper

答えて

2

私は少し助けることができると思います。あなたがcheck SCNetworkReachabilityFlagsにする必要があります、私が思うに、フラグの特定の組み合わせになります。 WI-FIとCellularを使用していることを示すフラグの組み合わせをサポートするドキュメントを見つけることができませんでした。また、その設定を直接確認できるドキュメントも見つかりませんでした。

以前の経験に基づいて、Appleはおそらくあなたがその設定を直接確認する方法を持っていない可能性があります。

だから私たちを始めさせる少しのコードはありますか?

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

あなたが選択した変数に変数を定義することができます。 (たぶん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を助ける知っていることは有効であるとフラグを観察設定でデバッグすることになります。それとも、私より賢くて、彼らが何であるかを知っているだけです。私が誰かが指摘した場合、私はこの回答を更新するか、正しいフラグの組み合わせを見つけます。

+0

ありがとうございました。私のチームの誰かがこれをガイドとして使って何かを得ることができました。私はAppleがこれに関するいくつかの正式な指針を提供してくれることを願っていますその間に、レーダーの問題が提出されました。 –

+0

@NicholasHart聞いてうれしい!コードを投稿したり、自分の投稿を編集したり、私に編集を送ったりして、完全な答えにすることができますか? –

関連する問題