[iOS开发]为程序请求始终访问位置的权限

使用 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。

好了,现在权限申请完了,为了让我们的程序能够在后台运行,我们还需要进入工程选项中设置一下:

locationbackground

否则你的程序在切出前台或锁屏后不会得到任何响应。

另外,注意下 NSLocationAlwaysUsageDescription 和 NSLocationWhenInUseUsageDescription 这两个字符串最好设置一下,它会显示在你申请权限时,iOS 弹出的对话框中。你可以写一些为啥你要申请这个权限,让用户能够确定是否要给你授权。

分享到: