【问题标题】:How to determine whether user is on Edge or 3G on iPhone如何确定用户是在 iPhone 上使用 Edge 还是 3G
【发布时间】:2014-03-30 11:14:35
【问题描述】:

虽然在您的应用程序中以编程方式确定 iPhone 是在 Wifi 还是数据网络上相对简单,但我无法确定 iPhone 是在 Edge 还是 3G 上。

有人想出办法来确定这一点吗?

注意:我不担心 Apple AppStore 接受政策,所以我不介意在我的应用程序中做一些 hacky。 (不过 iPhone 不必越狱)

【问题讨论】:

  • 我也在寻找这个问题的答案。如果您能够找到解决方案,请在此处发布。谢谢!

标签: iphone


【解决方案1】:

iPhone 不会以编程方式向开发人员提供此类信息。最好的结果是确定与给定主机的连接是否必须通过蜂窝网络进行路由 - 请参阅 SCNetworkReachability 参考和 Reachability 项目了解更多信息。

【讨论】:

    【解决方案2】:

    假设 Tim 的回答是正确的,您可以判断用户是使用 3G 还是边缘网络的一种方法是,您可以通过启动计时器让应用从 Web 下载一些文件并计算速度来测试连接速度,您应该能够通过速度差异判断它们是使用 3G 还是使用 Edge。

    【讨论】:

    • 这并不总是可靠的 - 一个非常差的 3G 连接可能具有与出色的 EDGE 连接相同的吞吐量。这将比任何事情都更加猜测。此外,除了速度之外,还有其他指标;连接之间的另一个大区别是第一个响应数据包的时间(EDGE 往往在这里胜出)。
    • 但基于测量的猜测的优势在于,即使您认为自己在 Edge 但实际上在 3G 上 - 如果 3G 使用较低带宽传输,您可能会做正确的事情连接速度与 Edge 一样慢。
    【解决方案3】:

    尝试从状态栏查看:

    UIApplication *app = [UIApplication sharedApplication];
    NSArray *subviews = [[[app valueForKey:@"statusBar"] valueForKey:@"foregroundView"]    subviews];
    NSNumber *dataNetworkItemView = nil;
    
    for (id subview in subviews) {
        if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) {
            dataNetworkItemView = subview;
            break;
        }
    }
    int connectivity;
    connectivity =  [dataNetworkItemView valueForKey:@"dataNetworkType"];
    

    到目前为止我发现的值键:

    0 = No wifi or cellular
    
    1 = 2G and earlier? (not confirmed)
    
    2 = 3G? (not yet confirmed)
    
    3 = 4G
    
    4 = LTE
    
    5 = Wifi
    

    【讨论】:

      【解决方案4】:

      确定检测 iPhone 2G 的一种方法是查看操作系统报告的设备名称

      #import <sys/utsname.h>
      + (NSString *)deviceType {
          struct utsname u;
          uname(&u);
          NSString *returnValue = [NSString stringWithFormat:@"%s", u.machine];
      
          return returnValue;
      }
      

      您要查找的返回值是“iPhone1,1”,表示 iPhone 2G。将此与 Reachability 项目结合起来,以判断它们何时在蜂窝网络上,并且您有 1 条途径来保证它们在边缘连接上

      【讨论】:

      • 3G 在这种情况下并不意味着“iPhone 3G”
      • 并不是指 iPhone 3G。看看声明。 “保证他们在 iPhone 2G 上处于领先地位”并没有说明 iPhone 3G。
      猜你喜欢
      • 2010-12-27
      • 2010-10-15
      • 2023-04-09
      • 2019-06-07
      • 2012-04-09
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      相关资源
      最近更新 更多