Ich versuche, den letzten bekannten Standort mit Google API zu bekommen.Android Permission Request Fehler
Ich erhalte die Fehlermeldung „Anruf benötigt Berechtigungen, die zurückgewiesen werden können ...“
Allerdings habe ich bereits für die Berechtigungen in Runtime gefragt, so dass ich weiß nicht, warum der Fehler immer noch zeigt ...
Hier ist, was ich getan habe: kann
/** Value to match on callback of request permissions response */
public static final int MY_PERMISSIONS_REQUEST_LOCATION = 1;
/** GoogleApiClient */
private GoogleApiClient googleApiClient = null;
/** Last known location */
private Location lastLocation = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
// ...
// Create a GoogleApiClient instance
googleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.enableAutoManage(this, this)
.addApi(LocationServices.API)
.build();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_LOCATION: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay!
if (permissions.length == 1 &&
permissions[0] == Manifest.permission.ACCESS_FINE_LOCATION) {
// ERROR STILL SHOWING HERE!
lastLocation = LocationServices.FusedLocationApi.getLastLocation(
googleApiClient);
}
} else {
// permission denied, boo!
}
break;
}
default:
break;
}
}
@Override
public void onConnected(@Nullable Bundle bundle) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
// NO ERROR HERE, IT'S FINE
lastLocation = LocationServices.FusedLocationApi.getLastLocation(
googleApiClient);
} else {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
MY_PERMISSIONS_REQUEST_LOCATION);
}
}
@Override
public void onConnectionSuspended(int i) {
// do nothing
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
// An unresolvable error has occurred and a connection to Google APIs
// could not be established. Display an error message, or handle
// the failure silently
Toast toast = Toast.makeText(this, getText(R.string.google_api_connection_error), Toast.LENGTH_LONG);
toast.show();
}
Wie Sie sehen, ist das, was ich tun möchte:
lastLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
Warum bekomme ich immer noch den Fehler und wie kann ich das beheben?
Vielen Dank im Voraus!
Wenn Sie sich auf eine Nachricht innerhalb des Android Studio Java-Editors beziehen, handelt es sich um eine Warnmeldung, nicht um einen Fehler. Wenn Sie der Meinung sind, dass alles ordnungsgemäß implementiert wurde, sollte eine Option zum Unterdrücken der im Quick-Fix-Menü verfügbaren Lint-Nachricht vorhanden sein. – CommonsWare
Es ist keine Warnung, es ist ein Fehler. (rote Farbe auf Linter). Und es lässt mich das Projekt nicht bauen – Tirafesi
"Es ist keine Warnung, es ist ein Fehler. (Rote Farbe auf Linter)" - AFAIK, verwendet Google nur mehr rot. "Und ich kann das Projekt nicht erstellen" - Sie erhalten wahrscheinlich einen anderen Fehler im Build-Prozess, den Sie beheben müssen. Das würde in der Gradle-Konsole oder anderen Ausgabefenstern angezeigt werden, nicht im Java-Editor. Diese bestimmte Nachricht sollte nur im Java-Editor angezeigt werden, da es sich um eine Warnmeldung "Lint" und nicht um einen Kompilierungsfehler handelt. Sie können auch das tun, was ich vorgeschlagen habe, und das Quick-Fix-Menü verwenden, um die entsprechende "@ SuppressLint" -Anmerkung hinzuzufügen. – CommonsWare