检测iOS的网络可用性并打开网络设置
来源:互联网 发布:淘宝上如何申请退款 编辑:程序博客网 时间:2024/04/29 05:14
今天接到个需求,要求程序能够检测网络可用性,并在没有网络可用的时候能够弹出对话框,并允许用户点击按钮打开网络设置。
这个问题,我首先想到的就是用一个方法检测网络可用性,然后用UIApplication
的openURL
方法打开某个特殊URL,就可以进入设置了。于是,我迅速地建了个测试项目,写了个简单的实现,如下:
123456789101112131415161718192021222324
// 注意:这个方法仅对iOS 5.0.x有效+ (BOOL) isNetworkAvailable { //Via Stackoverflow NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"]; NSURLRequest *request = [NSMutableURLRequest requestWithURL:url]; NSHTTPURLResponse *response = nil; [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:NULL]; return (response != nil);}- (void)viewDidLoad{ [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. if (![[self class] isNetworkAvailable]) { [[[UIAlertView alloc] initWithTitle:@"No network" message:@"No networkNetwork unavailable!!!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:@"Settings", nil] show]; }}- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { if (buttonIndex != 0) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=General&path=Network"]]; }}
编译运行之后,网络不可用倒是顺利提示了,但是我很杯具的发现,点了提示框里的“Settings”按钮之后完全没有反应。于是STFW,然后悲催的发现“特殊URL”在iOS 5.1里已经失效。多方搜索基于openURL
的方法无果。
正当我快放弃的时候,我发现高德地图在iOS 5.1下居然有类似的功能!(难道高德地图用了Private API,而且没有被苹果发现?我偷偷的这么想。)我对着高德地图又研究了好久,发现高德地图居然能够判断有无蜂窝网络和飞行模式!(嗯,肯定是Private API无误了!【误!】)
然后突然灵光一闪,是不是Info.plist
在作祟呢?因为Info.plist
可以检测有无摄像头啥的,检测网络应该也没问题吧。于是,我解包了高德地图,打开Info.plist
一看,果然有一条名为SBUsesNetwork
的Boolean
类型的记录。
然后我就注释了自己的代码,在Info.plist
里增加了一条:
12
<key>SBUsesNetwork</key><true/>
编译运行,终于出现了高德地图一样的提示对话框。按下“设置”按钮,顺利转跳到了“设置”程序里,问题解决。
经过这次乌龙,我只有再次感叹,Cocoa (Touch)深似海,而我的脚才刚踩上沙滩。
顺道:我真的用软件检测了高德地图是否用了Private API。答案当然是否定的。【我这个白痴】
(全文完)
转自:http://cocoa.venj.me/blog/warn-no-network-and-show-settings/
- 检测iOS的网络可用性并打开网络设置
- IOS检测网络并打开设置页面
- ios判断网络可用性
- 判断网络状态并打开网络设置
- ios检测网络,无网络提示并直接进入设置页面
- Android判断网络是否打开,并打开设置网络界面
- Android判断网络是否打开,并打开设置网络界面
- Android判断网络是否打开,并打开设置网络界面
- Android判断网络是否打开,并打开设置网络界面
- Android判断网络是否打开,并打开设置网络界面
- Android判断网络是否打开,并打开设置网络界面
- Android判断网络是否打开,并打开设置网络界面
- android4.0 中设置网络出错,Android判断网络是否打开,并打开设置网络界面
- iOS 中设置全局网络检测
- ios网络状态的检测
- 提示网络状态并打开网络设置页面
- Android检测网络是否可用并打开、扫描、连接WIFI
- 网络检测--跳转--设置
- 【笔记】C与指针 第六章 指针
- 智能眼镜分析
- leetcode 第11-12题
- 【ServletConfig、ServletContext】使用ServletContext、类加载器读取资源文件
- SQL Server设置周一为每周第一天
- 检测iOS的网络可用性并打开网络设置
- 《生活大爆炸》等多部美剧被下架
- 原 几种TCP连接中出现RST的情况
- Socket协议
- MSSQL获取昨天,本周,本月 sqlserver时间获取
- Object-C中的协议
- 更新svn时出错,大概的意思是项目被锁定了
- 写给明天的软件工程师
- 线程与进程的区别归纳