2015-11-09 8 views
5

enter image description hereCome dimenticare la scelta "Mai chiedere di nuovo" nella finestra di autorizzazione runtime Android M

desidero sapere dove è memorizzata la casella di controllo flag "Mai chiedere di nuovo" booleano e come cancellare il suo valore? Non necessariamente a livello di programmazione, ma manualmente - tramite impostazioni, comandi o alcuni strumenti. Provato a cancellare i dati delle app, disinstallare, disinstallare e cancellare, provato a cambiare manualmente i permessi avanti/indietro, provato anche a configurare una nuova immagine Marshmallow per l'emulatore, ma senza fortuna!

+1

Credo che se vai alle impostazioni e poi alle applicazioni e selezioni la tua applicazione, dovrebbe essere lì da qualche parte. – Johan

+1

Sì, corretto, ho appena scoperto per caso l'opzione "Ripristina preferenze app". Non lo sapevo fino ad ora. – WindRider

+0

Nah, non funziona troppo! :(Cancellando la mia risposta! – WindRider

risposta

6

Sia i dati di compensazione (Impostazioni> Applicazioni> app> Storage> Cancella dati) e disinstallando l'app, cancella lo stato di questo flag e cancella tutto il resto relativo alle autorizzazioni di runtime per l'app.

Questo comportamento è stato testato su un Nexus 5 con Android 6.0, tramite this sample app.

Mi sembra di ricordare di aver visto un'opzione manuale per questo da qualche parte, ma non riesco a trovarlo ora. Potrebbe essere qualcosa che è tornato nelle versioni di M Developer Preview e ottenuto per la versione 6.0 finale.

+0

Io uso l'emulatore - non funziona nulla. Potresti provare l'emulatore per favore? – WindRider

+0

@WindRider: entrambi gli approcci funzionano perfettamente con l'app di esempio su un emulatore Android 6.0. – CommonsWare

+0

Il problema era nel mio codice. Stavo usando i gruppi di autorizzazioni invece delle autorizzazioni. Ciò ha causato il ripristino immediato di PERMISSION_DENIED ogni volta, a prescindere da cosa. – WindRider

3

trovato:

Impostazioni di sistema> Applicazioni> Reset App Preferenze (nel menu)

enter image description here

4

È possibile "dimenticarlo" cancellando i dati dalle impostazioni dell'app. Ma se vuoi scoprire se è stato impostato un permesso di non richiederlo di nuovo, puoi controllarlo programmaticamente usando il metodo onRequestPermissionsResult().

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
    for(String permission: permissions){ 
      if(ActivityCompat.shouldShowRequestPermissionRationale(this, permission)){ 
       //denied 
      }else{ 
       if(ActivityCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED){ 
        //allowed 
       } else{ 
        //set to never ask again 
        Log.e("set to never ask again", permission); 
       } 
      } 
    } 
} 

PS: ho risposto piena attuazione a this risposta.

Problemi correlati