2016-09-14 75 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; 
相關問題