2016-02-11 8 views
7

Sto cercando di verificare se le autorizzazioni vengono concesse/revocate dall'utente in Android Marshmallow. Sfortunatamente ContextCompat.checkSelfPermission() (che è un warpper intorno a Context.checkCallingOrSelfPermission) sembra restituire sempre PackageManager.PERMISSION_GRANTED (0) se hai incluso quell'autorizzazione specifica nel tuo manifest indipendentemente dallo stato corrente dell'autorizzazione (ad es. Se l'utente ha revocato l'autorizzazione). Ho anche provato someContext.checkCallingOrSelfPermission(), ma il risultato è lo stesso.ContextCompat.checkSelfPermission() restituisce un valore errato

Qualcuno ha provato questo? Sto usando Android Marshmallow sulla console nVidia Shield (usando il programma Beta di nVidia).

+2

Qual è il tuo 'targetSdkVersion'? – CommonsWare

+0

@CommonsWare Sì, hai individuato il problema! Ho intenzione di spiegare in una risposta. – Metallica

risposta

9

Come risulta, la versione targetSdk nel manifest deve essere 23, il mio era 22. Se il tuo SDK di destinazione è 23 (Android 6), tutte le autorizzazioni (nel file manifest) sono disabilitate per impostazione predefinita, mentre se il tuo L'SDK target è 22 (Android 5.1) e la tua app è in esecuzione su Android 6, tutte le autorizzazioni sono abilitate per impostazione predefinita quando l'utente installa l'app e, anche se l'utente revoca le autorizzazioni in un secondo momento, l'API menzionata restituisce un valore errato (che è un bug secondo me).

+4

Puoi anche usare 'PermissionChecker', che dovrebbe dirti se l'utente ha negato il gruppo di permessi tramite Impostazioni: http://developer.android.com/reference/android/support/v4/content/PermissionChecker.html – CommonsWare

+1

Lo stesso problema con obiettivo 22 e in esecuzione su Android 6.0. – einverne