确定iPhone上是否启用了飞行模式?

时间:2011-10-08 09:58:56

标签: iphone objective-c

更新:从某些版本的iOS 8(可能是8.3)开始,即使在飞行模式下也可以打开GPS硬件(即,即使在飞行模式下也可以获得GPS定位)。这使得这个问题没有实际意义。

-

是否可以以编程方式确定iPhone是否处于飞行模式?我特别想知道它是否处于AirPlane模式,而不是拥有(或没有)网络连接。这个问题已经被问了很多,但我看到的每个答案都提到了Apple的Reachability代码,以确定网络连接是否可用。

我正在编写一款使用iPhone GPS的应用程序。目前,如果启用了飞行模式并且我的应用程序已启动,我的位置管理器对象仍然显示存在,但仍然显示为我提供了一个(缓存?)位置。状态栏中会显示小GPS图标,告诉我我的应用正在确定位置。

Airplane Mode and GPS arrow indicator

我想知道手机是否处于飞行模式,以便我无法初始化位置管理器对象,我可以更改我的UI以向用户表明GPS功能不可用。

无论网络连接如何,显然都可以使用GPS功能,因此缺乏网络连接使我成为飞机模式的不良代理。在飞行模式下,我似乎没有得到任何特定错误(通过locationManager:didFailWithError),只是我假设的一般错误可能来自多个来源。

4 个答案:

答案 0 :(得分:5)

我的应用程序的类似要求,除了我事先知道它很可能用于“无细胞信号”环境(露营在偏远地区)并且用户可能将设备置于飞行模式以节省电池,没有意识到它关闭了GPS。

由于飞行模式不会导致didFailWithError,并且locationServicesEnabled返回yes,我将计时器设置为60秒,如果在计时器到期之前没有返回GPS读数,我会向用户显示一条消息,告诉他们GPS数据无法阅读,并建议他们检查飞机模式是否未启用,并确保他们能够清楚地看到天空。

答案 1 :(得分:3)

我不知道是否有可能获取此信息,至少使用公共类,但如果您需要提醒用户他处于飞行模式,那么应用程序功能有限,您可以设置Info.plist将UIRequiresPersistentWiFi属性文件归档为“true”。然后,当设置飞行模式时,您将收到此消息。 顺便提一下,这种方法不仅仅是检查飞行模式状态,而是因为它是系统支持的,就像用户启用飞行模式然后重新启用Wi-Fi(仍然保持在飞行模式)然后系统警报将不会显示。

答案 2 :(得分:1)

一个解决方案可能是take a screenshot of the device并查看该区域中的颜色。如果它们是橙色的,那么你处于飞行模式。

答案 3 :(得分:0)

您真的不应该尝试检查是否启用了飞行模式。如果Apple改变飞行模式的工作方式,即使打开GPS设备也会启用,该怎么办?可靠地检测GPS服务是否已启用的最佳方法是实施CLLocationManagerDelegate并让API 告诉您是否有GPS可用

检查可能传递给你的NSError会告诉你是否有问题