2016-12-16 3 views
5

WiFi 지원 기능이 활성화되어 있는지 확인하려고합니다. 일부 데이터를 얻기 위해 내 액세스 포인트에 연결되어있을 때 문제가 있습니다. 연결 상태가 불량하면 셀룰러 데이터가 사용되며 액세스 포인트가 간섭합니다. 이 옵션이 활성화되어 있는지 확인하는 방법이 있습니까?iOS WiFi 지원 기능이 활성화되어 있는지 확인하십시오.

+0

wifi를 확인 하시겠습니까? 아니면 올바르게 설정되어 있지 않습니까? –

+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

감사합니다. Jon, 도움이되었습니다. 우리 팀의 누군가가 이것을 가이드로 사용하여 뭔가를 얻을 수있었습니다. 애플이 이것에 대한 공식적인 지침을 제공하기를 바랍니다. 그동안 레이다 문제는 ... –

+0

@NicholasHart 듣기 좋게! 코드를 게시하거나 게시물을 편집하거나 수정 사항을 보내 주시면 완벽한 답변을 드릴 수 있습니다. –

관련 문제