2016-02-11 14 views
7

Próbuję sprawdzić, czy uprawnienia zostały udzielone/unieważnione przez użytkownika w Androidzie Marshmallow. Niestety, ContextCompat.checkSelfPermission() (który jest urządzeniem spaczającym w pobliżu Context.checkCallingOrSelfPermission) wydaje się zawsze zwracać PackageManager.PERMISSION_GRANTED (0), jeśli w swoim manifeście uwzględniono to konkretne uprawnienie, niezależnie od bieżącego stanu uprawnienia (np. Jeśli użytkownik odwołał to uprawnienie). Próbowałem również someContext.checkCallingOrSelfPermission(), ale wynik jest taki sam.Android's ContextCompat.checkSelfPermission() zwraca niepoprawną wartość

Czy ktoś tego doświadczył? Używam Androida Marshmallow na konsoli NVidia Shield (używając programu Beta NVidia).

+2

Jaka jest twoja "targetSdkVersion"? – CommonsWare

+0

@CommonsWare Tak, wskazałeś problem! Zamierzam wyjaśnić w odpowiedzi. – Metallica

Odpowiedz

9

Okazuje się, że wartość targetSdkVersion w manifeście musi wynosić 23, moja była 22. Jeśli docelowy pakiet SDK to 23 (Android 6), wszystkie uprawnienia (w manifeście) są domyślnie wyłączone, natomiast jeśli docelowy pakiet SDK to 22 (Android 5.1), a Twoja aplikacja działa na Androidzie 6, wszystkie uprawnienia są domyślnie włączone, gdy użytkownik instaluje aplikację, a nawet jeśli użytkownik odwoła uprawnienia później, wymieniony interfejs API zwróci nieprawidłową wartość (co jest moim zdaniem błędem).

+4

Można również użyć 'PermissionChecker', który powinien powiedzieć, czy użytkownik odmówił grupie uprawnień poprzez Ustawienia: http://developer.android.com/reference/android/support/v4/content/PermissionChecker.html – CommonsWare

+1

Ten sam problem z cel 22 i działa na systemie Android 6.0. – einverne

Powiązane problemy