虽然在你的应用程序中编程确定iPhone是否在Wifi或数据网络上相对简单,但我无法找到一种方法来确定iPhone是否处于Edge或3G上。
有人找到了一种确定这一点的方法吗?
注意:我不担心苹果AppStore的接受政策,所以我不介意在我的应用程序中做一些hacky的事情。(iPhone不应该被越狱)
虽然在你的应用程序中编程确定iPhone是否在Wifi或数据网络上相对简单,但我无法找到一种方法来确定iPhone是否处于Edge或3G上。
有人找到了一种确定这一点的方法吗?
注意:我不担心苹果AppStore的接受政策,所以我不介意在我的应用程序中做一些hacky的事情。(iPhone不应该被越狱)
试着从状态栏检查它:
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
有一种方法可以确定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 项目结合使用,以确定他们是否在蜂窝网络上,这样你就有了一条途径来确保他们处于 EDGE 连接状态。