2016-02-11 17 views
7

Ich versuche zu überprüfen, ob Berechtigungen von Benutzern in Android Marshmallow gewährt/widerrufen werden. Leider scheint ContextCompat.checkSelfPermission() (welches ein Warpper um Context.checkCallingOrSelfPermission ist) immer PackageManager.PERMISSION_GRANTED (0) zurückzugeben, wenn Sie diese bestimmte Berechtigung in Ihrem Manifest enthalten, unabhängig vom aktuellen Status der Berechtigung (z. B. wenn der Benutzer die Berechtigung widerrufen hat). Ich habe auch versucht someContext.checkCallingOrSelfPermission(), aber das Ergebnis ist das gleiche.Androids ContextCompat.checkSelfPermission() gibt den falschen Wert zurück

Hat jemand das erlebt? Ich benutze Android Marshmallow auf nVidia Shield-Konsole (mit nVidia Beta-Programm).

+2

Was ist Ihre 'targetSdkVersion'? – CommonsWare

+0

@CommonsWare Ja, Sie haben das Problem erkannt! Ich werde es in einer Antwort erklären. – Metallica

Antwort

9

Wie sich herausstellt, muss die targetSdkVersion im Manifest 23 sein, meine war 22. Wenn Ihr Ziel-SDK 23 (Android 6) ist, sind alle Berechtigungen (in Ihrem Manifest) standardmäßig deaktiviert, während Sie Ziel-SDK ist 22 (Android 5.1) und Ihre App läuft unter Android 6. Alle Berechtigungen sind standardmäßig aktiviert, wenn der Benutzer die App installiert. Selbst wenn der Benutzer später die Berechtigungen widerruft, gibt die angegebene API einen falschen Wert zurück (was meiner Meinung nach ein Fehler ist).

+4

Sie können auch 'PermissionChecker' verwenden, der Ihnen sagen sollte, ob der Benutzer die Berechtigungsgruppe über die Einstellungen abgelehnt hat: http://developer.android.com/reference/android/support/v4/content/PermissionChecker.html – CommonsWare

+1

Gleiches Problem mit Ziel 22 und läuft auf Android 6.0. – einverne

Verwandte Themen