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重启后后台定位服务不重启的主要内容,如果未能解决你的问题,请参考以下文章

iPhone重启时运行应用程序? [复制]

如何保证 docker 后台进程重启,而不引起容器关闭

如何保证 docker 后台进程重启,而不引起容器关闭

如何保证 docker 后台进程重启,而不引起容器关闭

怎么在不重启tomcat服务器的情况下更新修改过的后台代码

swoft实现自动重启服务 转