it-swarm.com.de

Aktivieren des Standortmodus Hohe Genauigkeit oder Batteriesparen, programmgesteuert, ohne dass der Benutzer die Einstellungen aufrufen muss

Warum ich das frage:(auch der Grund, warum ich es in einer App ausprobiert habe)

Es passiert wenn wir Google Maps in Lollipop verwenden . Auch wenn der Standort deaktiviert ist, wird er nach Benutzereingaben über die Maps-App im Modus für hohe Genauigkeit aktiviert, ohne dass die Einstellungen aufgerufen werden müssen.

Eine ähnliche Funktionalität kann für die Aktivierung von Bluetooth erzielt werden, wenn die Aktion in meiner App gestartet wird. Der Benutzer muss eine Auswahl treffen, wird jedoch nicht zu den Einstellungen weitergeleitet.

startActivity(new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE));

die auf BluetoothAdapter gefunden werden konnte, jetzt wissen wir, dass es keinen LocationAdapter gibt, also habe ich mich umgesehen gms-> LocationServices , im Grunde fast alles unter Location API-Referenzen , Android.location. LocationManager scheint aber noch nicht ACTION_REQUEST_ENABLE verfügbar zu sein.

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

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

18
Pararth

UPDATE 3

Fordern Sie den Benutzer auf, die Standorteinstellungen zu ändern Als @patrickandroid, erwähnt in Kommentaren, der Link von der zweiten Aktualisierung ist unterbrochen

GoogleSamples; Android-Standort und Optionen - als Code-Referenz.

UPDATE 2

GoogleSamples; - zur Code-Referenz.

Dieses Beispiel baut auf dem in diesem Beispiel enthaltenen LocationUpdates-Beispiel auf Repo und ermöglicht dem Benutzer, die Standorteinstellungen des Geräts zu aktualisieren Verwenden eines Standortdialogs.

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


UPDATE 1

Google Play-Dienste, Version 7.0 (März 2015) veröffentlicht ... 

Standorteinstellungen - Während der FusedLocationProviderApi mehrere Sensoren kombiniert, um den optimalen Standort und die Genauigkeit von .__ zu erhalten. Der Ort, an dem Ihre App empfangen wird, hängt noch stark von den Einstellungen ab auf dem Gerät aktiviert (GPS, WLAN, Flugmodus und andere). Verwenden von Mit der neuen SettingsApi-Klasse können Sie ein Dialogfeld Standorteinstellungen aufrufen Das zeigt ein One-Touch-Steuerelement an, mit dem Benutzer ihre Einstellungen ändern können ohne deine App zu verlassen.

Verwenden der public-Schnittstelle SettingsApi 

  • Stellen Sie fest, ob die relevanten Systemeinstellungen auf dem Gerät aktiviert sind, um die gewünschte Standortabfrage auszuführen.
  • Rufen Sie optional ein Dialogfeld auf, in dem der Benutzer die erforderlichen Standorteinstellungen mit einem einzigen Tippen aktivieren kann.


Verlassen des vorherigen Teils als Referenz:
Update/Antwort
Für alle, die nach dieser Antwort suchen, Google Play Services 7.0
Es fügt APIs zum Erkennen von Orten und Herstellen von Verbindungen zu Geräten in der Nähe hinzu, verbessert mobile Anzeigen, Fitnessdaten, Standorteinstellungen und mehr 

In Google Play-Diensten 7.0 führen wir einen Standardmechanismus für .__ ein. Vergewissern Sie sich, dass die erforderlichen Standorteinstellungen für ein gegebenes .__ aktiviert sind. LocationRequest um erfolgreich zu sein. Gibt es mögliche Verbesserungen, können Sie kann ein One-Touch-Steuerelement anzeigen, mit dem der Benutzer seine Einstellungen ändern kann ohne deine App zu verlassen.

exactly this

Diese API bietet eine großartige Gelegenheit, um einen wesentlich besseren Benutzer zu erreichen Erfahrung, insbesondere wenn Standortinformationen für die Nutzererfahrung Ihrer App, wie es bei Google Maps der Fall war, als Sie integrierten den Ortseinstellungsdialog und sahen eine dramatische Erhöhung der Anzahl der Benutzer in einem guten Standortzustand.

Source:Blog für Android-Entwickler: Google Play Services 7.0 - Places Everyone!

SDK bald verfügbar!
Wir werden Google Play-Dienste 7.0 über .__ einführen. die nächsten paar Tage. Erwarten Sie ein Update zu diesem Blogbeitrag, der veröffentlicht wurde Dokumentation und die Verfügbarkeit des SDK nach dem Rollout abgeschlossen.

wird das programmatische l-o-c nach der Implementierung aktualisieren 

22
Pararth

Basierend auf @ user2450263 Anmerkungen, hier sind einige Ausschnitte,

/**
 * 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 benutze es wie

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

    locationChecker(mGoogleApiClient, MyActivity.this);

Grundsätzlich erhält Ihr Benutzer eine Aufforderung wie diese, bei der er die Standortbestimmung im Modus "Hohe Genauigkeit" aktivieren kann, ohne in die Einstellungen zu gehen.Turn on GPS

20
PsyGik

Ich habe Lösung, getestet auf Android 6.0.1 Marshmallow, auf button event OnClick die Leere aufrufen:

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);
    }
}

Für Android muss USB-Debugging aktiviert oder verwurzelt sein. Führen Sie den folgenden Befehl in adb Shell aus (von einer Root-Shell auf dem Gerät oder von einem Computer, der über USB angeschlossen ist, wenn das Gerät nicht gerootet ist):

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

Fügen Sie diese Berechtigungen im App-Manifest hinzu:

<uses-permission Android:name="Android.permission.WRITE_SETTINGS" />
<uses-permission Android:name="Android.permission.WRITE_SECURE_SETTINGS" />