如何确定用户是在iPhone上的Edge还是3G

时间:2009-09-04 19:17:31

标签: iphone

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

有人想办法确定这个吗?

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

4 个答案:

答案 0 :(得分:4)

iPhone不会以编程方式向开发人员提供此类信息。您可以期望的最好方法是确定是否必须通过单元网络路由到给定主机的连接 - 请参阅SCNetworkReachability参考和Reachability项目以获取更多信息。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

尝试从状态栏中检查:

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

答案 3 :(得分:-3)

您可以检测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项目结合起来,告诉他们什么时候他们在一个小区网络上,你有一条途径来保证他们在边缘连接上