Android 11 umożliwia użytkownikom określanie bardziej szczegółowych uprawnień dotyczących lokalizacji, mikrofonu i aparatu. Dodatkowo system resetuje uprawnienia nieużywanych aplikacji kierowanych na Androida 11 lub nowszego. Aplikacje mogą też wymagać aktualizacji deklarowanych uprawnień, jeśli korzystają z okna alertu systemowego lub odczytują informacje związane z numerami telefonów.
Jednorazowe uprawnienia
Od Androida 11, gdy aplikacja poprosi o zezwolenie związane z lokalizacją, mikrofonem lub aparatem, w oknie dialogowym zezwoleń wyświetlanym użytkownikowi pojawi się opcja Tylko tym razem. Jeśli użytkownik wybierze tę opcję w oknie, Twoja aplikacja otrzyma tymczasowe jednorazowe uprawnienie.
Dowiedz się więcej o tym, jak system obsługuje jednorazowe uprawnienia.
Automatyczne resetowanie uprawnień nieużywanych aplikacji
Jeśli Twoja aplikacja jest przeznaczona na Androida 11 lub nowszego i nie jest używana przez kilka miesięcy, system chroni dane użytkownika, automatycznie resetując uprawnienia czasu działania, które użytkownik przyznał Twojej aplikacji. Działanie to ma taki sam efekt, jak gdyby użytkownik wyświetlił uprawnienia w ustawieniach systemu i zmienił poziom dostępu aplikacji na Odmów. Jeśli Twoja aplikacja korzysta ze sprawdzonych metod żądania uprawnień w czasie działania, nie musisz wprowadzać w niej żadnych zmian. Dzieje się tak, ponieważ w miarę korzystania przez użytkownika z funkcji aplikacji powinna ona sprawdzać, czy ma potrzebne uprawnienia.
Dowiedz się więcej o tym, jak system automatycznie resetuje uprawnienia nieużywanych aplikacji.
Widoczność okna z prośbą o uprawnienia
Od Androida 11, jeśli użytkownik kliknie Odmów w przypadku określonego uprawnienia więcej niż raz od momentu zainstalowania aplikacji na urządzeniu, nie zobaczy okna uprawnień systemowych, gdy aplikacja ponownie poprosi o to uprawnienie. Działanie użytkownika oznacza „nie pytaj ponownie”. W poprzednich wersjach użytkownicy widzieli okno uprawnień systemowych za każdym razem, gdy aplikacja prosiła o uprawnienia, chyba że wcześniej zaznaczyli pole wyboru lub opcję „Nie pytaj ponownie”. Ta zmiana w Androidzie 11 zniechęca do wielokrotnego wysyłania próśb o uprawnienia, których użytkownicy nie chcą przyznać.
Aby sprawdzić, czy aplikacja ma trwale odrzucone uprawnienia (na potrzeby debugowania i testowania), użyj tego polecenia:
adb shell dumpsys package PACKAGE_NAME
gdzie PACKAGE_NAME to nazwa pakietu do sprawdzenia.
Dane wyjściowe polecenia zawierają sekcje podobne do tych:
... runtime permissions: android.permission.POST_NOTIFICATIONS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED] android.permission.ACCESS_FINE_LOCATION: granted=false, flags=[ USER_SET|USER_FIXED|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED] android.permission.BLUETOOTH_CONNECT: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED] ...
Uprawnienia, które zostały raz odrzucone przez użytkownika, są oznaczone symbolem USER_SET
.
Uprawnienia, które zostały trwale odrzucone przez dwukrotne kliknięcie Odrzuć, są oznaczone symbolem USER_FIXED
.
Podczas testowania możesz zresetować te flagi, aby testerzy nie byli zaskoczeni, gdy nie wyświetli się okno z prośbą o zgodę. Aby to zrobić, użyj polecenia:
adb shell pm clear-permission-flags PACKAGE_NAME PERMISSION_NAME user-set user-fixed
PERMISSION_NAME to nazwa uprawnienia, które chcesz zresetować. Pełną listę uprawnień aplikacji na Androida znajdziesz na stronie z dokumentacją interfejsu API uprawnień.
Dowiedz się więcej o tym, jak obsługiwać odmowę przyznania uprawnień w aplikacji.
Zmiany w oknie alertu systemowego
W Androidzie 11 wprowadziliśmy kilka zmian w sposobie przyznawania aplikacjom uprawnienia
SYSTEM_ALERT_WINDOW
. Zmiany te mają na celu ochronę użytkowników poprzez zwiększenie świadomości przyznawania uprawnień.
Niektóre aplikacje automatycznie otrzymują uprawnienie SYSTEM_ALERT_WINDOW po przesłaniu prośby.
Niektóre kategorie aplikacji automatycznie otrzymują uprawnienie SYSTEM_ALERT_WINDOW
na żądanie:
Każda aplikacja, która ma
ROLE_CALL_SCREENING
i prosi oSYSTEM_ALERT_WINDOW
, automatycznie otrzymuje to uprawnienie. Jeśli aplikacja utraciROLE_CALL_SCREENING
, utraci też uprawnienia.Każda aplikacja, która rejestruje ekran za pomocą funkcji
MediaProjection
i prosi o uprawnienieSYSTEM_ALERT_WINDOW
, automatycznie je otrzymuje, chyba że użytkownik wyraźnie odmówi przyznania tego uprawnienia. Gdy aplikacja przestanie rejestrować ekran, utraci to uprawnienie. Ten przypadek użycia jest przeznaczony głównie dla aplikacji do transmisji na żywo z gier.
Te aplikacje nie muszą wysyłać
ACTION_MANAGE_OVERLAY_PERMISSION
, aby uzyskać uprawnienie SYSTEM_ALERT_WINDOW
. Mogą po prostu poprosić o SYSTEM_ALERT_WINDOW
bezpośrednio.
Intenty MANAGE_OVERLAY_PERMISSION zawsze przenoszą użytkownika na ekran uprawnień systemowych
Od Androida 11
ACTION_MANAGE_OVERLAY_PERMISSION
intencje zawsze przenoszą użytkownika do ekranu Ustawienia najwyższego poziomu, na którym może on przyznawać i odbierać
SYSTEM_ALERT_WINDOW
uprawnienia aplikacji. Wszelkie dane package:
w intencji są ignorowane.
W starszych wersjach Androida ACTION_MANAGE_OVERLAY_PERMISSION
intencja mogła określać pakiet, co powodowało przeniesienie użytkownika na ekran aplikacji, na którym można było zarządzać uprawnieniami. Ta funkcja nie jest obsługiwana w Androidzie 11. Użytkownik musi najpierw wybrać aplikację, której chce przyznać lub anulować uprawnienia. Ta zmiana ma na celu ochronę użytkowników poprzez zwiększenie świadomości przyznawania uprawnień.
Numery telefonów
Android 11 zmienia uprawnienia związane z telefonem, których aplikacja używa podczas odczytywania numerów telefonów.
Jeśli Twoja aplikacja jest kierowana na Androida 11 lub nowszego i musi mieć dostęp do interfejsów API numeru telefonu wymienionych na poniższej liście, musisz poprosić o zezwolenie READ_PHONE_NUMBERS
zamiast zezwolenia READ_PHONE_STATE
.
- Metoda
getLine1Number()
w klasachTelephonyManager
iTelecomManager
. - Nieobsługiwana metoda
getMsisdn()
w klasieTelephonyManager
.
Jeśli Twoja aplikacja deklaruje READ_PHONE_STATE
, aby wywoływać metody inne niż te z poprzedniej listy, możesz nadal wysyłać żądania READ_PHONE_STATE
we wszystkich wersjach Androida. Jeśli używasz uprawnienia READ_PHONE_STATE
tylko w przypadku metod z poprzedniej listy, zaktualizuj plik manifestu w ten sposób:
- Zmień deklarację
READ_PHONE_STATE
, tak aby aplikacja używała tego uprawnienia tylko na Androidzie 10 (poziom interfejsu API 29) i starszych wersjach. - Dodaj uprawnienie
READ_PHONE_NUMBERS
.
Ten proces pokazuje poniższy fragment deklaracji w pliku manifestu:
<manifest> <!-- Grants the READ_PHONE_STATE permission only on devices that run Android 10 (API level 29) and lower. --> <uses-permission android:name="android.permission.READ_PHONE_STATE" android:maxSdkVersion="29" /> <uses-permission android:name="android.permission.READ_PHONE_NUMBERS" /> </manifest>
Dodatkowe materiały
Więcej informacji o zmianach w uprawnieniach w Androidzie 11 znajdziesz w tych materiałach:
Filmy
Tworzenie aplikacji z uwzględnieniem najnowszych zmian dotyczących prywatności w Androidzie 11