Aktualizacje uprawnień w Androidzie 11

Android 11 umożliwia użytkownikom określanie bardziej szczegółowych uprawnień do lokalizacji, mikrofonu i aparatu. Ponadto system resetuje uprawnienia nieużywanych aplikacji kierowanych na Androida 11 lub nowszego. Aplikacje mogą też wymagać zaktualizowania deklarowanych uprawnień, jeśli korzystają z okna alertu systemowego lub odczytują informacje związane z numerami telefonów.

Jednorazowe zezwolenia

Od Androida 11, gdy aplikacja prosi o uprawnienia związane z lokalizacją, mikrofonem lub aparatem, w oknie z prośbą o uprawnienia wyświetla się opcja Tylko tym razem. Jeśli użytkownik wybierze tę opcję w oknie dialogowym, aplikacja otrzyma tymczasowe jednorazowe zezwolenie.

Więcej informacji o tym, jak system obsługuje jednorazowe zezwolenia.

Automatyczne resetowanie uprawnień nieużywanych aplikacji

Jeśli Twoja aplikacja jest kierowana na Androida 11 lub nowszego i nie jest używana przez kilka miesięcy, system chroni dane użytkownika, automatycznie resetując uprawnienia w czasie działania, które użytkownik przyznał Twojej aplikacji. Ta czynność 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 stosuje sprawdzone metody wysyłania prośby o uprawnienia w czasie działania, nie musisz wprowadzać w niej żadnych zmian. Dzieje się tak, ponieważ gdy użytkownik korzysta z funkcji aplikacji, powinna ona sprawdzać, czy ma uprawnienia, których potrzebuje.

Więcej informacji 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 z prośbą o uprawnienia, jeśli Twoja aplikacja ponownie poprosi o to uprawnienie. Działanie użytkownika oznacza „nie pytaj ponownie”. W poprzednich wersjach użytkownicy widzieli okno z prośbą o uprawnienia za każdym razem, gdy aplikacja prosiła o uprawnienia, chyba że użytkownik wcześniej zaznaczył pole 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 użytkownik odrzucił raz, są oznaczone flagą USER_SET. Uprawnienia, które zostały trwale odrzucone przez dwukrotne kliknięcie Odmów , są oznaczone flagą USER_FIXED.

Podczas testowania możesz zresetować te flagi, aby testerzy nie byli zaskoczeni, gdy nie wyświetli się okno z prośbą o uprawnienia. Aby to zrobić, użyj tego 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 wyświetlić pełną listę uprawnień aplikacji na Androida, otwórz stronę referencyjną interfejsu API uprawnień.

Więcej informacji o tym, jak obsługiwać odmowę przyznania uprawnień w aplikacji

Zmiany w oknie alertu systemowego

Android 11 wprowadza 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 wysłaniu prośby

Niektóre klasy aplikacji automatycznie otrzymują uprawnienie SYSTEM_ALERT_WINDOW po wysłaniu prośby:

  • Każda aplikacja, która ma ROLE_CALL_SCREENING i prosi o SYSTEM_ALERT_WINDOW, automatycznie otrzymuje to uprawnienie. Jeśli aplikacja utraci ROLE_CALL_SCREENING, utraci też to uprawnienie.

  • Każda aplikacja, która rejestruje ekran za pomocą MediaProjection i prosi o SYSTEM_ALERT_WINDOW, automatycznie otrzymuje to uprawnienie , chyba że użytkownik wyraźnie odmówił przyznania tego uprawnienia aplikacji. Gdy aplikacja przestanie rejestrować ekran, utraci to uprawnienie. Ten przypadek użycia jest przeznaczony głównie dla aplikacji do transmisji na żywo 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.

Intencje MANAGE_OVERLAY_PERMISSION zawsze przenoszą użytkownika na ekran uprawnień systemowych

Od Androida 11, ACTION_MANAGE_OVERLAY_PERMISSION intencje zawsze przenoszą użytkownika na ekran Ustawienia najwyższego poziomu, na którym może on przyznawać i odbierać SYSTEM_ALERT_WINDOW uprawnienia aplikacjom. Wszystkie dane package: w intencji są ignorowane.

W starszych wersjach Androida intencja ACTION_MANAGE_OVERLAY_PERMISSION mogła określać pakiet, który przenosił użytkownika na ekran zarządzania uprawnieniami specyficzny dla aplikacji. Ta funkcja nie jest obsługiwana w Androidzie 11. Zamiast tego użytkownik musi najpierw wybrać aplikację, której chce przyznać lub odebrać 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 Twoja 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 numerów telefonów wymienionych na tej liście, musisz poprosić o READ_PHONE_NUMBERS uprawnienie zamiast uprawnienia READ_PHONE_STATE.

Jeśli Twoja aplikacja deklaruje READ_PHONE_STATE do wywoływania metod innych niż te z poprzedniej listy, możesz nadal prosić o READ_PHONE_STATE we wszystkich wersjach Androida. Jeśli jednak używasz uprawnienia READ_PHONE_STATE tylko w przypadku metod z poprzedniej listy, zaktualizuj plik manifestu w ten sposób:

  1. Zmień deklarację READ_PHONE_STATE, aby aplikacja używała tego uprawnienia tylko w Androidzie 10 (API na poziomie 29) i starszych wersjach.
  2. Dodaj uprawnienie READ_PHONE_NUMBERS.

Ten proces ilustruje ten fragment deklaracji 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 w zakresie prywatności w Androidzie 11