2016-04-05 12 views
1

Ich war Wandern, wenn Sie den GPS-Dienst in einem Firemonkey-Projekt aktivieren können? Der Locationsensor aktiviert ihn nicht. Es kann nur GPS-Koordinaten erhalten, wenn GPS aktiviert ist oder Sie einen Netzwerkstandort haben.Firemonkey aktivieren GPS-Dienst für Android

In einigen anderen Android Apps werden Sie gefragt, ob Sie das GPS aktivieren möchten. Wenn Sie zustimmen, wird GPS für diese App aktiviert. Ich möchte das auch machen.

Ich weiß bereits, wie man überprüft, ob der GPS-Dienst für Android aktiviert ist, aber nicht, wie man es selbst aktiviert.

-Code unten ist, wie zu überprüfen, ob GPS aktiviert ist:

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; 

Ich habe versucht, das gleiche zu tun, wenn Sie es in Java programmieren würde. Wie dieser Link: 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; 

Ich erhalte keine Fehler, aber mein GPS bekommt auch nicht eingeschaltet.

UPDATE: Es scheint deaktiviert zu sein, GPS für Android 4.0 und höher zu aktivieren.

+0

Tat sie tun, um diese Fähigkeit filtern, um nur in der Lage sein, eine Benutzereingabe erforderlich ist, um fortzufahren. Sicherlich muss es aber einen Hack geben. –

Antwort

2

Sie können nicht GPS zu aktivieren, aber Sie können Benutzer fragen, es zu tun:

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;