使用 Delphi 开发定位相关的应用时,TLocationSensor 请求的定位权限是“使用应用期间”,这样子,程序一旦切入后台,你的应用就将被冻结进入冬眠状态,结果就会造成切换到后台后无法获取位置信息,直到你的程序被唤醒。
如果你的应用要求在后台时也能访问位置信息,则你需要手动申请位置访问权限为始终。要完成这一步,你需要:
1、引用 iOSapi.CoreLocation 单元;
2、如果窗体上有 TLocationSensor 组件,请确保它的 Active 被设置为了 false。
3、在窗体的 OnCreate 事件中,手动创建 CLLocationManager 实例,并请求位置访问权限。
procedure TForm1.FormCreate(Sender: TObject); var AMgr: CLLocationManager; begin FStartTime := Now; AMgr := TCLLocationManager.Create; AMgr.requestAlwaysAuthorization; end;
4、完成后,设置TLocationSensor的 Active 为 true。
好了,现在权限申请完了,为了让我们的程序能够在后台运行,我们还需要进入工程选项中设置一下:
否则你的程序在切出前台或锁屏后不会得到任何响应。
另外,注意下 NSLocationAlwaysUsageDescription 和 NSLocationWhenInUseUsageDescription 这两个字符串最好设置一下,它会显示在你申请权限时,iOS 弹出的对话框中。你可以写一些为啥你要申请这个权限,让用户能够确定是否要给你授权。