FusedLocation hat eine wunderbare API, um zu überprüfen, ob der Benutzer alle relevanten Einstellungen aktiviert hat, um den Standort zu erhalten. Ich folgte der Dokumentation https://developers.google.com/android/reference/com/google/android/gms/location/SettingsApi, um die SettingsApi zu starten. Mein Code zur Überprüfung der Benutzereinstellung lautet wie folgt:Android FusedLocation EinstellungenApi funktioniert nicht mehr als einmal
private void checkLocationSetting()
{
if (mLocationSettingsRequest == null)
{
mLocationSettingsRequest =
new LocationSettingsRequest.Builder()
.addLocationRequest(mLocationRequest)
.setAlwaysShow(true)
.build();
}
PendingResult<LocationSettingsResult> result =
LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, mLocationSettingsRequest);
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.
requestNewLocationBySettingLocationReq();
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(SpotToiletMap.this, REQUEST_CHECK_SETTINGS);
} 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.
MiscellaneousMethods.showGenericSnackBar(rootView, getString(R.string.location_settings_unavailable));
break;
}
}
}
});
}
Dieser Codeabschnitt funktioniert zum ersten Mal einwandfrei. Anschließend funktionierte der PendingResult CallBack nie. Ich konnte auch keine Logs auf Logcat finden. Für mich sieht es wie ein Implementierungsproblem aus.
So reproduzieren Sie das Problem.
Schalten Sie Ihr GPS aus. Versuchen Sie, die Methode aufzurufen, und sie funktioniert perfekt wie erwartet. Es fordert mich auf, n GPS zu wechseln. Sobald Sie die Standortaktualisierung erhalten haben, schalten Sie das GPS erneut aus und rufen Sie diese Methode auf. Ich bekomme nie einen Dialog um GPS zu aktivieren. Ich rufe diese Methode bei einem Klick an, der versucht, den neuesten Standort des Benutzers zu erhalten.
EDIT: Ich versuchte, PendingResult Ergebnis als eine Klassenvariable zu deklarieren. Immer noch kein Glück. Ich habe auch versucht, das Ergebnis nur einmal zu initialisieren, indem ich überprüft habe, ob es null ist, wie erwartet und wie in der Dokumentation von Google erwähnt, wirft es eine Ausnahme auf, die besagt, dass das Ergebnis bereits verbraucht ist.
Welche Version von Google Play-Diensten werden Sie in Ihrer App verwenden und welche Version der Google Play-Dienste haben Sie während des Tests auf dem Gerät installiert? –
Auf meinem Gerät habe ich Google Play Service 9.2.56 und in meiner App verwende ich 9.0.2. –
@DanielNugent Jetzt habe ich versucht, meine App zu aktualisieren, um die neueste 9.2.0-Version zu verwenden. Immer noch dasselbe Problem –