Android 11 umożliwia użytkownikom dokładniejsze określanie uprawnień dotyczących lokalizacji, mikrofonu i aparatu. Dodatkowo system resetuje uprawnienia nieużywanych aplikacji kierowanych na Androida 11 lub nowszego, a aplikacje mogą wymagać zadeklarowania zadeklarowanych uprawnień, jeśli używają okna alertu systemowego lub odczytują informacje związane z numerami telefonów.
Jednorazowe zezwolenia
Począwszy od Androida 11, za każdym razem, gdy aplikacja poprosi o uprawnienia związane z lokalizacją, mikrofonem lub aparatem, w oknie uprawnień widocznych dla użytkownika pojawi się opcja Tylko tym razem. Jeśli użytkownik wybierze tę opcję w oknie, aplikacja otrzyma tymczasowe uprawnienia jednorazowe.
Dowiedz się więcej o tym, jak system obsługuje uprawnienia jednorazowe.
Automatycznie resetuj uprawnienia nieużywanych aplikacji
Jeśli Twoja aplikacja jest kierowana na Androida 11 lub nowszego i nie będzie używana przez kilka miesięcy, system będzie chronić dane użytkownika, automatycznie resetując poufne uprawnienia czasu działania przyznane aplikacji przez użytkownika. Spowoduje to takie samo działanie jak wyświetlenie uprawnień w ustawieniach systemu przez użytkownika i zmianę poziomu dostępu aplikacji na Odmów. Jeśli Twoja aplikacja jest zgodna ze sprawdzonymi metodami wysyłania próśb o uprawnienia w czasie działania, nie musisz wprowadzać w niej żadnych zmian. Jest to spowodowane tym, że gdy użytkownik wchodzi w interakcje z funkcjami aplikacji, musisz sprawdzić, czy funkcje te mają potrzebne uprawnienia.
Dowiedz się więcej o tym, jak system automatycznie resetuje uprawnienia nieużywanych aplikacji.
Widoczność okna uprawnień
Począwszy od Androida 11, jeśli użytkownik kliknie Odmów, aby otrzymać określone uprawnienie więcej niż raz w trakcie instalacji aplikacji na urządzeniu, nie zobaczy okna uprawnień systemowych, jeśli aplikacja ponownie poprosi o takie uprawnienia. Działanie użytkownika oznacza „nie pytaj ponownie”. W poprzednich wersjach użytkownicy widzieli okno uprawnień systemowych za każdym razem, gdy Twoja aplikacja prosiła o dane uprawnienie, chyba że zaznaczyli wcześniej pole lub opcję „Nie pytaj ponownie”. Ta zmiana działania w Androidzie 11 zniechęca do powtarzania próśb o przyznanie uprawnień, które użytkownicy zdecydowali się odrzucać.
Aby sprawdzić, czy aplikacja otrzymała trwałą odmowę uprawnień (na potrzeby debugowania i testowania), użyj tego polecenia:
adb shell dumpsys package PACKAGE_NAME
Gdzie PACKAGE_NAME to nazwa pakietu do sprawdzenia.
Wynik polecenia zawiera 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 użytkownik odmówił raz, mają oznaczenie USER_SET
.
Uprawnienia, które zostały trwale odrzucone przez dwukrotny wybór Odmów, są oznaczone przez USER_FIXED
.
Podczas testów możesz zresetować te flagi, aby mieć pewność, że testerzy nie będą zaskoczeni, że okno żądania się nie wyświetli. 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ć. Aby zobaczyć pełną listę uprawnień aplikacji na Androida, otwórz stronę z informacjami o uprawnieniach interfejsu API.
Dowiedz się więcej o tym, jak radzić sobie z odmową uprawnień w aplikacji.
Zmiany w oknach alertów systemowych
Android 11 wprowadza kilka zmian w sposobie przyznawania aplikacjom uprawnień SYSTEM_ALERT_WINDOW
. Te zmiany mają chronić użytkowników, bo ich przyznanie jest bardziej zamierzone.
Niektóre aplikacje automatycznie otrzymują na żądanie uprawnienie SYSTEM_ALERT_WINDOW
Niektóre klasy aplikacji automatycznie otrzymują uprawnienia SYSTEM_ALERT_WINDOW
na żądanie:
Każda aplikacja, która ma
ROLE_CALL_SCREENING
i prosi o zgodę naSYSTEM_ALERT_WINDOW
, automatycznie otrzymuje to uprawnienie. Jeśli aplikacja utraci uprawnieniaROLE_CALL_SCREENING
, utraci to uprawnienie.Każda aplikacja, która przechwytuje zawartość ekranu za pomocą
MediaProjection
i prosi o zgodę naSYSTEM_ALERT_WINDOW
, automatycznie otrzymuje to uprawnienie, chyba że użytkownik wyraźnie odmówi zgody. Gdy aplikacja przestanie rejestrować zawartość ekranu, utraci to uprawnienie. Ten przypadek użycia jest przeznaczony głównie dla aplikacji do transmisji na żywo rozgrywek.
Te aplikacje nie muszą wysyłać żądania ACTION_MANAGE_OVERLAY_PERMISSION
, aby uzyskać uprawnienie SYSTEM_ALERT_WINDOW
. Mogą one po prostu poprosić o SYSTEM_ALERT_WINDOW
bezpośrednio.
Intencje MANAGE_OVERLAY_PERMISSION zawsze powodują wyświetlenie ekranu uprawnień systemowych
Począwszy od Androida 11, zamiary ACTION_MANAGE_OVERLAY_PERMISSION
zawsze przenoszą użytkownika na ekran Ustawienia najwyższego poziomu, gdzie może przyznawać i odbierać uprawnienia SYSTEM_ALERT_WINDOW
aplikacjom. Wszystkie dane package:
w intencji są ignorowane.
We wcześniejszych wersjach Androida intencja ACTION_MANAGE_OVERLAY_PERMISSION
mogła określać pakiet, który przenosiłby użytkownika na ekran aplikacji, gdzie może on zarządzać uprawnieniami. Ta funkcja nie jest obsługiwana
od Androida 11. Zamiast tego użytkownik musi najpierw wybrać aplikację, której chce przyznać lub cofnąć uprawnienia. Ta zmiana ma na celu ochronę użytkowników, ponieważ przyznawanie uprawnień jest bardziej celowe.
Numery telefonów
Android 11 zmienia uprawnienia związane z telefonem, z których aplikacja korzysta podczas odczytu numerów telefonów.
Jeśli Twoja aplikacja jest kierowana na Androida 11 lub nowszego i potrzebuje dostępu do interfejsów API numerów telefonów wymienionych na poniższej liście, musisz poprosić o uprawnienie READ_PHONE_NUMBERS
zamiast o uprawnienie READ_PHONE_STATE
.
- Metoda
getLine1Number()
w klasieTelephonyManager
iTelecomManager
. - Nieobsługiwana metoda
getMsisdn()
w klasieTelephonyManager
.
Jeśli Twoja aplikacja deklaruje READ_PHONE_STATE
do metod wywołań innych niż te z poprzedniej listy, możesz nadal wysyłać żądania READ_PHONE_STATE
we wszystkich wersjach Androida. Jeśli jednak używasz uprawnień 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 uprawnień tylko na Androidzie 10 (poziom interfejsu API 29) i starszych. - Dodaj uprawnienie
READ_PHONE_NUMBERS
.
Ten fragment kodu deklaracji w pliku manifestu ilustruje ten proces:
<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 uprawnień w Androidzie 11 znajdziesz w tych materiałach:
Filmy
Rozwój z uwzględnieniem najnowszych zmian dotyczących prywatności w Androidzie 11