【问题标题】:Check internet connection type (iOS)检查互联网连接类型 (iOS)
【发布时间】:2016-01-10 21:35:42
【问题描述】:

我正在创建一个应用程序,它实现了 MultipeerConnectivity 框架,因此我想在允许他继续之前检查用户的互联网连接类型。换句话说,我的问题是:

iOS 中有没有办法检查用户是通过蜂窝网络还是 WiFi 连接到互联网?我确定有,但我找不到。

注意:我不是在问如何检查用户是否连接到 Internet(我知道该怎么做)。提前谢谢你。

【问题讨论】:

标签: ios swift


【解决方案1】:

这个不是 swift,但我相信你会找到一个 swift 变体。

查看 Reachability 类,您可以在 Apple 上找到该类作为示例,并且可以根据需要进行调整。您很有可能已经在使用它来检测您是否已连接。

从这个类中,你可以询问连接状态:

Reachability *reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];

NetworkStatus status = [reachability currentReachabilityStatus];

if(status == NotReachable) 
{
    //No internet
}
else if (status == ReachableViaWiFi)
{
    //WiFi
}
else if (status == ReachableViaWWAN) 
{
    //3G
}

iOS Detect 3G or WiFi

【讨论】:

  • 提示:最好将问题标记为重复,而不是发布另一个答案的副本。无论如何,这个问题被标记为 Swift,而不是 Objective-C。谢谢。
  • 这就是为什么我没有将其标记为重复的原因,因为我为提问者提供了一个方向,他可以找到一些东西以及他可以查看的方向,因为这个解决方案在 Swift 中也很有效,有小的改编;)
  • 那么正确的做法是自己在 Swift 中进行调整,这将是一个不错的答案。 :) 事实上,由于错误的语言,它是题外话 - 即使,是的,我知道,它解决了这个问题......这不是迂腐,只是如果我们开始“回答 Java 问题Python”,我们注定要失败。 :p
【解决方案2】:
class func hasConnectivity() -> Bool
 {

 let reachability: Reachability = 

Reachability.reachabilityForInternetConnection()

  let networkStatus: Int = reachability.currentReachabilityStatus().rawValue

  return networkStatus != 0
}


=====================================

import Foundation
import SystemConfiguration

public class Reachability {

    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(nil, UnsafePointer($0)).takeRetainedValue()
        }

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

        let isReachable = (flags & UInt32(kSCNetworkFlagsReachable)) != 0
        let needsConnection = (flags & UInt32(kSCNetworkFlagsConnectionRequired)) != 0

        return isReachable && !needsConnection
    }

}

=> 这是对您有帮助的帖子:-

https://github.com/ashleymills/Reachability.swift

【讨论】:

  • 该代码(显然来自stackoverflow.com/a/25774420/1187415)不能用 Swift 2 编译。参见例如stackoverflow.com/a/25623647/1187415 更新。
  • 它没有回答我的问题,是吗?我的意思是,我什至添加了“通知”,你仍然回答了我要求不要回答的问题
  • 抱歉,我正忙于一些工作,所以我无法重播:而且我没有在 swift 2.0 中尝试过,所以我不能说更多关于 swift 2.0 的信息
  • 这无关紧要,因此我标记了它
  • 这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review
猜你喜欢
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 2017-03-16
相关资源
最近更新 更多