17

, warum ich das fragen: (auch der Grund, warum es in einer App für den Versuch)Aktivieren des Standortmodus mit hohen Genauigkeit oder Batterie zu speichern, programmatisch, ohne Benutzereinstellungen zu besuchen, um

Es passiert, wenn wir Verwenden Sie Google Maps in Lollipop. Auch wenn der Standort deaktiviert ist, wird er nach der Benutzereingabe aus der Google Maps App im Hochpräzisionsmodus aktiviert, ohne dass Sie die Einstellungen aufrufen müssen.

Eine ähnliche Funktionalität kann erreicht werden, um Bluetooth zu aktivieren, wo die Aktion in meiner App initiiert wird; Benutzer muss eine Wahl treffen, aber Benutzer nicht auf Einstellungen umgeleitet, mit:

startActivity(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE));

, die auf BluetoothAdapter gefunden werden konnte, jetzt wissen wir es nicht LocationAdapter ist, so sah ich mich um gms->LocationServices, im Grunde fast alles unter Location API references, android.location.LocationManager aber scheint nichts wie ACTION_REQUEST_ENABLE ist noch verfügbar.

Hoffe, es gibt eine andere Methode für die gleiche, und mehr Leute haben es versucht.

Bitte beachten Sie:
context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); funktioniert nicht so.

Antwort

21

UPDATE 2:

GoogleSamples; LocationSettings - for code reference.

Diese Probe auf den LocationUpdates baut in diesem Beispiel Repo enthalten und ermöglicht dem Benutzer die Position des Geräts Einstellungen zu aktualisieren Verwenden eines Standortdialogs.

Verwendet SettingsApi, um sicherzustellen, dass die Systemeinstellungen des Geräts ordnungsgemäß für die Standortanforderungen der App konfiguriert sind.


UPDATE 1:

Google Play services, Version 7.0 (March 2015) released...

Standorteinstellungen - Während die FusedLocationProviderApi kombiniert mehrere Sensoren die optimale Lage zu geben, um die Genauigkeit der die Standort, den Ihre App empfängt, hängt immer noch stark von den Einstellungen ab, die auf dem Gerät aktiviert sind (GPS, WLAN, Flugzeugmodus und andere). Mit der neuen SettingsApi-Klasse können Sie das Dialogfeld "Standorteinstellungen" aufrufen, in dem Benutzer mit einem One-Touch-Steuerelement die Einstellungen ändern können, ohne die App verlassen zu müssen.

die public interface SettingsApi

  • Bestimmen zu verwenden, wenn die relevanten Systemeinstellungen am Gerät die gewünschte Standortanforderung auszuführen aktiviert sind.
  • Optional kann ein Dialogfeld aufgerufen werden, in dem der Benutzer die erforderlichen Standorteinstellungen mit einem einzigen Antippen aktivieren kann.


den vorherigen Teil Referenz verlassen:
Update/Antwort
Für alle, für diese Antwort suchen, Google Play Services 7.0
Es fügt APIs Zum Erkennen von Orten und zum Verbinden mit Geräten in der Nähe, verbessert auf Handy-Anzeigen, Fitness D ata, Standorteinstellungen und mehr

In Google Play-Dienste 7.0, sind wir einen Standardmechanismus zu Prüfung einzuführen, dass die erforderlichen Standorteinstellungen für ein bestimmtes aktiviert sind Location erfolgreich zu sein. Wenn es mögliche Verbesserungen gibt, können Sie eine One-Touch-Steuerung anzeigen, damit der Benutzer seine Einstellungen ändern kann, ohne Ihre App zu verlassen.

exactly this

Diese API bietet eine große Chance für eine viel bessere Benutzer Erfahrung zu machen, vor allem, wenn Standortinformationen an die User Experience Ihrer Anwendung kritisch ist wie der Fall mit Google Maps war, als sie Das Dialogfeld Location Settings (Standorteinstellungen) wurde erweitert und die Anzahl der Benutzer in einem guten Standortzustand nahm dramatisch zu ( ).

Quelle:Android developers blog: Google Play services 7.0 - Places Everyone!

SDK Coming Soon!
Wir werden die Google Play-Dienste 7.0 in den nächsten Tagen über bereitstellen. Erwarten Sie eine Aktualisierung dieses Blogposts, die veröffentlichte Dokumentation und die Verfügbarkeit des SDK, sobald der Rollout abgeschlossen ist.

wird die programmatische loc nach der Implementierung aktualisieren

+0

i Brauchen Sie einen neuen SDK-Download, können Sie einen Link hinzufügen? –

+0

im Grunde Ihr SDK-Manager -> Extras -> Google Play Services, aktualisieren Sie das und es wird in Ihrem Bibliotheksprojekt enthalten sein – user2450263

+0

ja, aber es mir nicht zu aktualisieren –

19

Basierend auf @ user2450263 oben bemerkt, sind hier einige Auszüge,

/** 
* Prompt user to enable GPS and Location Services 
* @param mGoogleApiClient 
* @param activity 
*/ 
public static void locationChecker(GoogleApiClient mGoogleApiClient, final Activity activity) { 
    LocationRequest locationRequest = LocationRequest.create(); 
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    locationRequest.setInterval(30 * 1000); 
    locationRequest.setFastestInterval(5 * 1000); 
    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() 
      .addLocationRequest(locationRequest); 
    builder.setAlwaysShow(true); 
    PendingResult<LocationSettingsResult> result = 
      LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build()); 
    result.setResultCallback(new ResultCallback<LocationSettingsResult>() { 
     @Override 
     public void onResult(LocationSettingsResult result) { 
      final Status status = result.getStatus(); 
      final LocationSettingsStates state = result.getLocationSettingsStates(); 
      switch (status.getStatusCode()) { 
       case LocationSettingsStatusCodes.SUCCESS: 
        // All location settings are satisfied. The client can initialize location 
        // requests here. 
        break; 
       case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: 
        // Location settings are not satisfied. But could be fixed by showing the user 
        // a dialog. 
        try { 
         // Show the dialog by calling startResolutionForResult(), 
         // and check the result in onActivityResult(). 
         status.startResolutionForResult(
           activity, 1000); 
        } catch (IntentSender.SendIntentException e) { 
         // Ignore the error. 
        } 
        break; 
       case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: 
        // Location settings are not satisfied. However, we have no way to fix the 
        // settings so we won't show the dialog. 
        break; 
      } 
     } 
    }); 
} 

Und es verwenden, wie,

mGoogleApiClient = new GoogleApiClient 
      .Builder(this) 
      .enableAutoManage(this, 34992, this) 
      .addApi(LocationServices.API) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .build(); 

    locationChecker(mGoogleApiClient, MyActivity.this); 

Grundsätzlich Ihre Benutzer erhalten eine Eingabeaufforderung wie diese, in der sie den Standort im Modus Hohe Genauigkeit aktivieren können, ohne in die Einstellungen 01 zu wechselnTurn on GPS

0

I-Lösung haben, getestet auf Android 6.0.1 Eibisch, auf die Schaltfläche Ereignis OnClick Aufruf der Leere:

private void openGPSSettings() { 
    //Get GPS now state (open or closed) 
    boolean gpsEnabled = Settings.Secure.isLocationProviderEnabled(getContentResolver(), LocationManager.GPS_PROVIDER); 

    if (gpsEnabled) { 
     Settings.Secure.putInt(getContentResolver(), Settings.Secure.LOCATION_MODE, 0); 
    } else { 
     Settings.Secure.putInt(getContentResolver(), Settings.Secure.LOCATION_MODE, 3); 
    } 
} 

Android benötigt USB-Debugging aktiviert sein oder verwurzelt sein. Den Befehl unter in adb shell (von einem Root-Shell auf dem Gerät oder von einem Computer über USB verbunden ist, wenn das Gerät nicht verankert ist):

pm grant com.example.application.test android.permission.WRITE_SECURE_SETTINGS 

In diesen Berechtigungen in app manifest:

<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /> 
+3

Nicht alle Telefone sind verwurzelt. Dies ist keine praktikable Lösung. – PsyGik

+1

Super! funktioniert für mich :) – Rosenpin

+0

Dies funktioniert nicht mit systemlosen gerootet android 6 Geräte, oder? Die App muss auch eine System-App sein, richtig? Ich spreche über Android 6 und höher nur ... – prom85