2016-09-14 78 views
0

我正在使用Delphi 10.1 Berlin开发Android移动应用程序。并且,我需要检查位置传感器是否未打开,然后我需要重定向到android mobile中的位置传感器设置。我如何能够使用Delphi实现?我见过使用JAVA的例子,但没有在Delphi中找到。并提前致谢。如何使用delphi将应用重定向到位置传感器设置

回答

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; 
相关问题