Ho riscontrato alcuni problemi con i permessi di Android. Il problema è che onResume viene chiamato ogni volta che onRequestPermissionsResult è stato chiamato anche se l'utente ha già detto "Non chiedere più".Perché onResume viene chiamato dopo onRequestPermissionsResult?
Un esempio:
@Override
public void onResume() {
super.onResume();
startLocationProvider();
}
private void startLocationProvider() {
if (!locationService.requestLocationPermission(this, 0)) {
return;
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == 0) {
if (grantResults.length == 1 && grantResults[ 0 ] == PackageManager.PERMISSION_GRANTED) {
startLocationProvider();
}
}
Funziona bene fino a quando l'utente seleziona "Mai chiedere di nuovo" e negano. Non so perché onResume viene chiamato ancora e ancora sebbene non venga mostrata all'utente alcuna finestra di dialogo.
onResume viene chiamato dopo onRequestPermissionResult per consentire all'attività di prendere in considerazione la scelta dell'utente (autorizzazione concessa o negata) ed eseguire il codice di conseguenza. Ma ora il vero problema è perché, quando l'utente seleziona "Non chiedere più" e nega un'autorizzazione, onRequestPermissionsResult viene chiamato indefinitamente? Se trovi qualcosa per favore fammi sapere! –
Provare a spostare il codice da onResume e in onStart. –