1
loveminds 2013-03-26 00:53:29 +08:00
是否可以通过下载一定数据进行测速的方式(当然,这很耗流量)
|
2
chemhack 2013-03-26 01:44:28 +08:00
截图然后看图标?
|
6
shellcodecow 2013-03-26 10:57:52 +08:00 1
中国的iphone网络是区分2G和3G,要想获取当前的网络状态一直没有一个好的方法,网上给的例子也不尽让人满意
最近闲来无事,仔细的研究Apple提供的例子:Reachability 通过如下的代码: ? 1 2 3 Reachability *reach = [Reachability reachabilityWithHostName:@"www.apple.com"]; NSLog(@"%d", [reach currentReachabilityStatus]); return; 在currentReachabilityStatus函数中,我们注意到这样的输出: static void PrintReachabilityFlags(SCNetworkReachabilityFlags flags, const char* comment) { #if kShouldPrintReachabilityFlags NSLog(@"Reachability Flag Status: %c%c %c%c%c%c%c%c%c %s\n", (flags & kSCNetworkReachabilityFlagsIsWWAN) ? 'W' : '-', (flags & kSCNetworkReachabilityFlagsReachable) ? 'R' : '-', (flags & kSCNetworkReachabilityFlagsTransientConnection) ? 't' : '-', (flags & kSCNetworkReachabilityFlagsConnectionRequired) ? 'c' : '-', (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) ? 'C' : '-', (flags & kSCNetworkReachabilityFlagsInterventionRequired) ? 'i' : '-', (flags & kSCNetworkReachabilityFlagsConnectionOnDemand) ? 'D' : '-', (flags & kSCNetworkReachabilityFlagsIsLocalAddress) ? 'l' : '-', (flags & kSCNetworkReachabilityFlagsIsDirect) ? 'd' : '-', comment ); #endif } 当是wifi的时候输出R 当是3G的时候输出Rt 当是联通2G或者是移动的时候输出Rtc 在头文件定义如下: ? 1 2 3 4 5 6 typedef enum { NotReachable = 0, ReachableViaWiFi, ReachableVia3G, ReachableVia2G,//当前无法区分是联通的2G还是移动的2G } NetworkStatus; 因此我就是以这个为判断条件的,重写Reachability的函数: - (NetworkStatus) networkStatusForFlags: (SCNetworkReachabilityFlags) flags { if ((flags & kSCNetworkReachabilityFlagsReachable) == 0) { return NotReachable; } BOOL retVal = NotReachable; if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0) { // if target host is reachable and no connection is required // then we'll assume (for now) that your on Wi-Fi retVal = ReachableViaWiFi; } if ((((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) || (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0)) { // ... and the connection is on-demand (or on-traffic) if the // calling application is using the CFSocketStream or higher APIs if ((flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0) { // ... and no [user] intervention is needed retVal = ReachableViaWiFi; } } ? 1 2 3 4 5 6 7 8 9 if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN) { retVal = ReachableVia3G; if((flags & kSCNetworkReachabilityFlagsReachable) == kSCNetworkReachabilityFlagsReachable) { if((flags & kSCNetworkReachabilityFlagsTransientConnection) == kSCNetworkReachabilityFlagsTransientConnection) { retVal = ReachableVia2G; } } } return retVal; } 这样就可以正确的区分是2G,3G,wifi网络,这只支持中国地区,其他地区未考虑。 作者:Rush.D.Xzj |
7
shellcodecow 2013-03-26 10:58:25 +08:00
好吧 我复制黏贴了 请自行补脑。Sorry
|
8
hilenlai 2013-03-26 21:59:21 +08:00
|
9
bang590 2013-03-26 22:08:59 +08:00
测速
|
10
loveminds 2013-03-27 04:05:07 +08:00
@shellcodecow 3G还分电信联通两家呢~这个范例4G(LTE)输出什么?R么?
|
11
shellcodecow 2013-03-27 10:03:18 +08:00
@loveminds 4G我就不知道了,你要实现看目的是什么了。我个人想的是一个软件只要分清2G/3G应该就可以了吧。
|
12
darcy 2013-03-27 12:04:45 +08:00 via iPhone
木有可靠方法的
|
13
cloudream 2013-03-27 12:30:04 +08:00
让用户自己选择自己的网络最靠谱,默认2G,用3g的自己会打开 LOL
|
14
yuhe520521 2013-11-27 15:38:49 +08:00
@cloudream 你难道不知道公司有一个部门叫做 用户体验设计部门么 你说 让用户自己选 就用户自己选的话 你让他们吃什么?
|