android - Firemonkey 为 Android 启用 GPS 服务

标签 android delphi gps java-native-interface firemonkey

我想知道是否可以在 Firemonkey 项目中启用 GPS 服务? 位置传感器未启用它。仅当启用 GPS 或您有网络位置时,它才能获取 GPS 坐标。

在其他一些 Android 应用程序中,它会询问您是否要启用 GPS,如果您同意,它将为该应用程序启用 GPS。我也想做这个。

我已经知道如何检查 Android 是否启用了 GPS 服务,但不知道如何启用它本身。

下面的代码是如何检查 GPS 是否启用:

uses
  Androidapi.JNI.Location,
  Androidapi.JNIBridge,
  FMX.Helpers.Android,
  Androidapi.JNI.GraphicsContentViewText;

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
var
  locationManager : JLocationManager;
begin
  locationManager := TJLocationManager.Wrap( ((SharedActivity.getSystemService(TJContext.JavaClass.LOCATION_SERVICE)) as ILocalObject).GetObjectID);

  if locationManager.isProviderEnabled(TJLocationManager.JavaClass.GPS_PROVIDER) then
   ;   //do something   

  if locationManager.isProviderEnabled(TJLocationManager.JavaClass.NETWORK_PROVIDER) then 
   ;   //do something  else
end;

如果你用 Java 编程,我也尝试过做同样的事情。喜欢这个链接:https://stackoverflow.com/a/5305835/2728408

procedure TForm1.Button1Click(Sender: TObject);
{$IFDEF ANDROID}
var
  Intent: JIntent;
{$ENDIF}
begin
{$IFDEF ANDROID}
  Intent := TJIntent.Create;
  Intent.addCategory(TJIntent.JavaClass.CATEGORY_ALTERNATIVE);
  Intent.setData(TJnet_Uri.JavaClass.parse(StringToJString('3')));
  Intent.setClassName(StringToJString('com.android.settings'), StringToJString('com.android.settings.widget.SettingsAppWidgetProvider'));
  try
    //For Delphi 10 Seattle
    TAndroidHelper.Activity.sendBroadcast(Intent);
    //For older versions of Delphi
    //SharedActivity.sendBroadcast(Intent);
  except
    on e: exception do
    begin
      ShowMessage('Error: ' + e.Message);
    end;
  end;
{$ENDIF}
end;

我没有收到任何错误,但我的 GPS 也没有打开。

更新: Android 4.0 及更高版本似乎无法启用 GPS。

最佳答案

您无法启用 GPS,但您可以要求用户这样做:

procedure TForm1.GPSSettings;
{$IFDEF ANDROID}
var
  Intent: JIntent;
{$ENDIF}
begin
{$IFDEF ANDROID}
  Intent := TJIntent.Create;
  Intent :=     TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_LOCATION_SOURCE_SETTINGS);
  TAndroidHelper.Activity.startActivity(Intent);
{$ENDIF}
end;

关于android - Firemonkey 为 Android 启用 GPS 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36420687/

相关文章:

android - 在某些时间间隔内导致 GPS 估计不稳定的原因是什么?

ios - 在 iOS 中获取准确位置

android - 如何实现android zoomview?

java - 如何将倒计时器添加到 Firebase 中?

Delphi - 我如何告诉系统使用哪台打印机?

Delphi Rtti 用于通用上下文中的接口(interface)

android - 大型 Qt 外部二进制资源文件

Android ListView : overriding causes scrolling do not executed

delphi - 注册表 "forgetting"值

gps - 用于 GPS 跟踪的微 Controller 无线通信