LocationSettingsRequest.Builder verfügt über eine Methode setAlwaysShow(boolean show)
. Während das Dokument angibt, dass derzeit nichts unternommen wird (aktualisiert am 05.07.2015: Die aktualisierte Google-Dokumentation hat diesen Wortlaut entfernt), builder.setAlwaysShow(true);
aktiviert die Einstellung das Verhalten von Google Maps:
Hier ist der Code, mit dem es funktioniert hat:
if (googleApiClient == null) {
googleApiClient = new GoogleApiClient.Builder(getActivity())
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this).build();
googleApiClient.connect();
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); //this is the key ingredient
//**************************
PendingResult<LocationSettingsResult> result =
LocationServices.SettingsApi.checkLocationSettings(googleApiClient, 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(
getActivity(), 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;
}
}
});
}
Aus der Android-Dokumentation
Kotlin finden Sie hier: https://stackoverflow.com/a/61868985/12478830
RESOLUTION_REQUIRED
. Sobald ich den Standort akzeptiere und aktiviere, trifft erSUCCESS
und überspringt vollständigonActivityResult()
. Durch DrückenNo
oder Zurück wird der Dialog für eine Sekunde ausgeblendet, dann neu geladen undRESOLUTION_REQUIRED
erneut gedrückt . Die einzige Möglichkeit, den Dialog zu entfernen, besteht darin, die App entweder zu akzeptieren oder zu schließen und erneut zu öffnen.launchMode
können NICHT eingestellt werden,singleInstance
da dies sonst NICHT funktioniert. Der Dialog wird nie angezeigt undonActivityResult
automatisch aufgerufen. HABEN SIE NICHTandroid:launchMode="singleInstance"
für Ihre Aktivität inAndroidManifest
. Ich habe diesen sehr harten Weg nach 3 StundenIch möchte einige Änderungen an Kai's Antwort für diejenigen hinzufügen, die nach Ja / Nein-Schaltflächen suchen.
Deklarieren Sie diese Konstante in Ihrer Aktivität
Rufen Sie
settingsrequest()
in Ihrem onStart ()quelle
LocationServices.SettingsApi ist jetzt veraltet. Daher verwenden wir SettingsClient
Überprüfen Sie dann, ob die aktuellen Standorteinstellungen erfüllt sind. Erstellen Sie die Aufgabe LocationSettingsResponse:
Fügen Sie dann Listener hinzu
OnActivityResult hinzugefügt
Siehe den Link SettingsClient
quelle
implementation 'com.google.android.gms:play-services-location:16.0.0'
stattdessen verwenden.Es funktioniert ähnlich wie Google Maps?
Quellcode: https://drive.google.com/open?id=0BzBKpZ4nzNzUOXM2eEhHM3hOZk0
Hinzufügen einer Abhängigkeit in der Datei build.gradle:
ODER
quelle
Ola Cabs verwendet die neu veröffentlichte Einstellungs-API, um diese Funktionalität zu erreichen. Gemäß der neuen API muss der Benutzer nicht zur Einstellungsseite navigieren, um Standortdienste zu aktivieren, die eine nahtlose Integration für dieselbe ermöglichen. Bitte lesen Sie unten für weitere Details:
https://developers.google.com/android/reference/com/google/android/gms/location/SettingsApi
quelle
SettingsAPI
wurde veraltet, jetzt verwenden SieSettingsClient
developer.google.com/android/reference/com/google/android/gms/…Abhängigkeit
Code
quelle
Sie können auch mehrere LocationRequests for Builder hinzufügen, um das Dialogfeld "GPS, Wi-Fi und Mobilfunknetze als Standort verwenden" zu erhalten, anstatt nur "GPS als Standort verwenden".
quelle
Verwenden Sie in Kotlin diesen Code:
quelle
Bitte überprüfen Sie meine sehr einfache Lösung, um den Benutzerstandort in den Vordergrund zu stellen.
https://github.com/Maqsood007/UserLocation-Android/blob/master/app/src/main/java/jetpack/skill/userlocation_android/utils/LocationUtility.kt
quelle