簡體   English   中英

如何在 swift 2.2 中檢查 3G、4G 和 wifi 互聯網連接

[英]How to check 3G,4G and wifi internet connection in swift 2.2

導入基礎導入系統配置

公共類可達性{

class func isConnectedToNetwork() -> Bool {

    var zeroAddress = sockaddr_in(sin_len: 0, sin_family: 0, sin_port: 0, sin_addr: in_addr(s_addr: 0), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
    zeroAddress.sin_len = UInt8(sizeofValue(zeroAddress))
    zeroAddress.sin_family = sa_family_t(AF_INET)

    let defaultRouteReachability = withUnsafePointer(&zeroAddress) {
        SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, UnsafePointer($0))
    }

    var flags: SCNetworkReachabilityFlags = SCNetworkReachabilityFlags(rawValue: 0)
    if SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) == false {
        return false
    }

    let isReachable = flags == .Reachable
    let needsConnection = flags == .ConnectionRequired

    return isReachable && !needsConnection

}

}

我正在使用上面編寫的代碼來檢查我的應用程序的互聯網連接,這僅檢查 3G 和 WIFI 連接。 但我還需要檢查 4G 連接。 任何人都可以幫我找到解決方案。

這是來自 Apple 的Reachability ,您需要下載 Reachability.h/.m 並將其拖到您的項目中。

然后import CoreTelephony並嘗試以下操作。

    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")
                case CTRadioAccessTechnologyWCDMA,
                     CTRadioAccessTechnologyHSDPA,
                     CTRadioAccessTechnologyHSUPA,
                     CTRadioAccessTechnologyCDMAEVDORev0,
                     CTRadioAccessTechnologyCDMAEVDORevA,
                     CTRadioAccessTechnologyCDMAEVDORevB,
                     CTRadioAccessTechnologyeHRPD:
                    print("Reachable Via 3G")
                case CTRadioAccessTechnologyLTE:
                    print("Reachable Via 4G")
                default:
                    fatalError("error")
                }
            }
        }
    }

最新的可達性快速工作代碼。

if let status = appReachablity?.currentReachabilityStatus {
            var message = ""
            if status == .notReachable {
                // .NotReachable
                message = "DOT##=> Not Reachable"
                print(message)

            }
            else if status == .reachableViaWiFi {
                // .ReachableViaWiFi
                message = "DOT##=> Reachable Via WiFi"
                print(message)
            }
            else if status == .reachableViaWWAN {
                // .ReachableViaWWAN
                let netInfo = CTTelephonyNetworkInfo()
                if let cRAT = netInfo.currentRadioAccessTechnology  {
                    switch cRAT {
                    case CTRadioAccessTechnologyGPRS,
                         CTRadioAccessTechnologyEdge,
                         CTRadioAccessTechnologyCDMA1x:
                        message = "DOT##=> Reachable Via 2G"
                        print(message)
                    case CTRadioAccessTechnologyWCDMA,
                         CTRadioAccessTechnologyHSDPA,
                         CTRadioAccessTechnologyHSUPA,
                         CTRadioAccessTechnologyCDMAEVDORev0,
                         CTRadioAccessTechnologyCDMAEVDORevA,
                         CTRadioAccessTechnologyCDMAEVDORevB,
                         CTRadioAccessTechnologyeHRPD:
                        message = "DOT##=> Reachable Via 3G"
                        print(message)
                    case CTRadioAccessTechnologyLTE:
                        message = "DOT##=> Reachable Via 4G"
                        print(message)
                    default:
                        fatalError("error")
                    }
                }
            }
            Toast(text: message, duration: Delay.long).show()
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM