0

Androidモバイルアプリケーションの開発にDelphi 10.1 Berlinを使用しています。その中で、位置センサーがオンになっていないかどうかを確認する必要があるため、Android モバイルの位置センサー設定にリダイレクトする必要があります。Delphi を使用して実装するにはどうすればよいですか? JAVAを使用した例を見たことがありますが、Delphi の例は見つかりませんでした。事前に感謝します。

4

1 に答える 1

1

次のようなコードを試すことができます。ヘルパーユニットは次のとおりです。

unit LocationU;

interface

function IsGPSProviderEnabled: Boolean;

function IsNetworkProviderEnabled: Boolean;

procedure LaunchLocationSettings;

implementation

uses
  System.SysUtils,
  Androidapi.Helpers,
  Androidapi.JNI.JavaTypes,
  Androidapi.JNI.GraphicsContentViewText,
  Androidapi.JNI.Location,
  Androidapi.JNI.Provider;

function IsProviderEnabled(const Provider: JString): Boolean;
var
  LocationManagerObj: JObject;
  LocationManager: JLocationManager;
begin
  LocationManagerObj := TAndroidHelper.Context.getSystemService(
    TJContext.JavaClass.LOCATION_SERVICE);
  LocationManager := TJLocationManager.Wrap(LocationManagerObj);
  Result := LocationManager.isProviderEnabled(Provider);
end;

function IsGPSProviderEnabled: Boolean;
begin
  Result := IsProviderEnabled(TJLocationManager.JavaClass.GPS_PROVIDER);
end;

function IsNetworkProviderEnabled: Boolean;
begin
  Result := IsProviderEnabled(TJLocationManager.JavaClass.NETWORK_PROVIDER);
end;

procedure LaunchLocationSettings;
begin
  TAndroidHelper.Activity.startActivity(
    TJIntent.JavaClass.init(TJSettings.JavaClass.ACTION_LOCATION_SOURCE_SETTINGS));
end;

end.

これを呼び出すコードは次のとおりです。

uses
  FMX.Helpers.Android,
  Androidapi.Helpers,
  Androidapi.JNI.Widget,
  LocationU;

procedure TMainForm.FormCreate(Sender: TObject);
begin
  if not IsGPSProviderEnabled and not IsNetworkProviderEnabled then
  begin
    CallInUiThread(
      procedure
      begin
        TJToast.JavaClass.makeText(
          TAndroidHelper.Context,
          StrToJCharSequence('Location services not enabled - launching settings'),
          TJToast.JavaClass.LENGTH_SHORT).show
      end);
    LaunchLocationSettings;
  end;
end;
于 2016-09-15T08:41:01.763 に答える