如果在应用程序启动后允许位置,Delphi Android位置传感器无法正常工

时间:2016-10-01 15:18:38

标签: android delphi location firemonkey android-sensors

我对 TLocationSensor 有一个有趣的问题。如果启动我的应用程序之前在Android菜单中的位置,传感器工作正常。我捕捉事件 OnLocationChange 。但如果我不允许Android菜单中的位置并启动应用程序然后允许在Android菜单传感器中的位置没有开始工作!

未调用事件 OnLocationChange

在这种情况下设置 LocationSensor1.Active:= true; 无效。

或者我的应用程序启动后如何自动允许位置?

我使用Delphi XE10.1 Berlin和Android 6.0

2 个答案:

答案 0 :(得分:0)

今天也发生了同样的问题。在我的情况下,手动设置应用程序权限可以完成工作

答案 1 :(得分:0)

对于最近的 android 版本,有必要在运行时请求权限(在启动时或在需要时可能更好)。

{$IFDEF ANDROID}
uses
  System.Permissions,
  Androidapi.JNI.OS; 

PermissionsService.RequestPermissions([
  JStringToString(TJManifest_permission.JavaClass.ACCESS_COARSE_LOCATION),
  JStringToString(TJManifest_permission.JavaClass.ACCESS_FINE_LOCATION)],
  procedure(const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>)
  begin
    if (Length(AGrantResults) <> 2)
      or (AGrantResults[0] <> TPermissionStatus.Granted)
      or (AGrantResults[1] <> TPermissionStatus.Granted) then 
      Log('Location permissions not granted');
  end);
{$ENDIF}

当然,这两个权限也必须在项目选项中勾选,但这已经是默认设置了。