Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
确定iPhone上是否启用了飞行模式?_Iphone_Objective C - Fatal编程技术网

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

确定iPhone上是否启用了飞行模式?,iphone,objective-c,Iphone,Objective C,更新:在iOS 8的某些版本(可能是8.3版)中,GPS硬件甚至可以在飞行模式下打开(即,即使在飞行模式下,您也可以获得GPS位置)。这使这个问题变得毫无意义 -- 是否可以通过编程确定iPhone是否处于飞行模式?我特别想知道它是否处于飞行模式,而不是有(或没有)网络连接。这个问题被问了很多,但我看到的每个答案都提到了苹果的可达性代码,以确定网络连接是否可用 我正在编写一个使用iPhone GPS的应用程序。目前,如果飞机模式打开,并且我的应用程序启动,我的位置管理器对象似乎仍然存在,并且似乎

更新:在iOS 8的某些版本(可能是8.3版)中,GPS硬件甚至可以在飞行模式下打开(即,即使在飞行模式下,您也可以获得GPS位置)。这使这个问题变得毫无意义

--

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

我正在编写一个使用iPhone GPS的应用程序。目前,如果飞机模式打开,并且我的应用程序启动,我的位置管理器对象似乎仍然存在,并且似乎仍在给我一个(缓存?)位置。小GPS图标出现在状态栏中,让我知道我的应用程序正在确定位置

我想知道手机是否处于飞行模式,因此我无法初始化location manager对象,并且我可以更改我的UI以向用户指示GPS功能不可用


GPS功能显然可以在不考虑网络连接的情况下使用,因此缺乏网络连接对我来说是飞机模式的不良替代。在飞行模式下,我似乎没有收到任何特定的错误(通过locationManager:didFailWithError),只是我假设的一个一般性错误可能来自多个来源。

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

一种解决方案可能是查看该区域中存在的颜色。如果它们是橙色,则表示您处于飞行模式。

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


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

你真的不应该试图检查飞机模式是否启用。如果苹果改变了飞行模式的工作方式,即使打开GPS设备,它也会保持启用状态,那该怎么办?可靠检测是否启用GPS服务的最佳方法是实施,并让API告诉您GPS是否可用


检查
n错误
它可能传递给您,您将知道是否有问题

谢谢。我已经在这么做了,但在我看来,这似乎有点胡说八道(因为我的应用程序不需要任何网络连接,更不用说WiFi连接了)。我还认为它会对电池寿命产生负面影响,因为我的理解是它会保持WiFi连接处于活动状态。也许你是对的——也许没有办法获得这些信息。我喜欢你的横向思维,但我认为这个解决方案在不同版本的iOS下,可能在不同的硬件上很容易崩溃。如果我找不到其他工作,我可能会试试。是的,这绝对是一个黑客解决方案。内置API更好。当你在设备上截图时,状态栏不包括在内。@ceejayoz-我在手机上截图时,没有使用“批准的”API。谢谢。这就是我最后要做的。错误消息中应该向用户提及的另一个情况是,他们应该验证应用程序是否已被授予访问GPS数据的权限。我让一位用户坚持应用程序已损坏,但却发现他在权限弹出窗口中点击了“不允许”。如果用户未为您的应用程序启用位置服务,则在
locationManager:didFailWithError:
方法中会出现
kCLErrorDenied
错误结果。我有一个特定的错误对话框来处理这个案例。如果设备处于飞行模式,则会出现一般的
kclerorlocationunknown
错误;在飞行模式下,LocationServices将调用locationManager:didFailWithError:delegate,错误为kCLErrorDomain 0。如果您的应用程序被授权使用位置服务,则authorizationStatus将为KClauthorizationStatusAuthorizated,正如您被授权一样。。。硬件只是缺少满足请求的能力。(我猜想坏的GPS芯片会返回类似的结果。)是的,但这不会告诉我GPS由于设备处于飞行模式而不可用。飞行模式设置不会改变[CLLocationManager locationServicesEnabled]或[CLLocationManager authorizationStatus]的结果。