iphone重启后后台定位服务不重启
Posted
技术标签:
【中文标题】iphone重启后后台定位服务不重启【英文标题】:background location services is not restarted when the iphone have been rebooted 【发布时间】:2017-07-19 12:22:21 【问题描述】:在我的应用程序中,我开始聆听这样的重大位置变化:
AllowsBackgroundLocationUpdates := true;
startMonitoringSignificantLocationChanges;
在 info.plist 我也有:
<key>UIBackgroundModes</key>
<array>
<string>location</string>
</array>
然后我决定重新启动 iphone。在我走遍整个城市后,我注意到 DidUpdateLocations
再也没有被调用过 :( 我错过了什么?
如果重要的话,我也在 Delphi...
【问题讨论】:
您的应用程序是否在 iPhone 重启后重新启动?还是第一次使用时启动(由您启动)? 这是问题所在,iphone重启后应用程序无法启动:( 【参考方案1】:根据这个链接:
recieving location updates after app is terminated
有一些因素会决定你的代码是否被执行,即你的应用需要:
在 didFinishLaunchingWithOptions 调用期间设置位置服务处于活动状态,并且它需要用于更改类型:lctLarge(TLocationSensor 上的LocationChange 属性),如果应用程序是由于位置更改而启动的(UIApplicationLaunchOptionsLocationKey 存在于 launchOptions 中)
调用 setAllowsBackgroundUpdates(True)(适用于 ios 9 及更高版本),以便它实际上在后台接收位置更新,除了在 UIBackgroundModes 中包含位置
调用requestAlwaysAuthorization,以便您的应用可以启动到后台。
可以通过多种方式实现第一个要求,或者通过“修补”FMX.Platform.iOS 以便由于位置更改而启动发送一条您的代码可以拦截的消息,或者通过拦截 FinishedLaunching 消息(无需补丁),但在后一种情况下,您可能无法确定应用程序是否由于位置更改而启动。不过这可能无关紧要,因为您也可以拦截 BecameActive 事件,如果需要,您可以在其中将 LocationChange 设置为 lctSmall。
在任何情况下,如果由于位置更改而启动(即开始时未运行)您的应用程序,您将不会看到它出现,因为 iOS 会保持应用程序“不可见”。但是,您可以通过使用时间戳记录位置更新来验证代码是否有效,以便了解更改发生的时间。
【讨论】:
以上是关于iphone重启后后台定位服务不重启的主要内容,如果未能解决你的问题,请参考以下文章