Aktualizacje uprawnień w Androidzie 11

Android 11 umożliwia użytkownikom dokładniejsze określanie uprawnień dotyczących lokalizacji, mikrofonu i aparatu. System zresetuje też 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.

Uprawnienia jednorazowe

Od Androida 11, gdy aplikacja prosi o uprawnienia związane z lokalizacją, mikrofonem lub kamerą, wyświetlany użytkownikowi dialog uprawnień zawiera opcję 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 jest używana od kilku miesięcy, system chroni dane użytkownika, automatycznie resetując uprawnienia do dostępu do danych wrażliwych, które użytkownik przyznał aplikacji. Ma to taki sam skutek, jak w przypadku, gdy użytkownik wyświetli uprawnienie w ustawieniach systemu i zmieni poziom 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łania użytkownika wskazują, że nie chce, abyśmy pytali 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 zachowania w Androidzie 11 zniechęca do wielokrotnego wysyłania próśb o przyznanie uprawnień, których użytkownicy odrzucili.

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 testowania możesz zresetować te flagi, aby testerzy nie byli zaskoczeni, gdy nie wyświetli się okno z prośbą. 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. Celem tych zmian jest ochrona użytkowników poprzez utrudnienie nieumyślnego udzielenia uprawnień.

Niektóre aplikacje automatycznie otrzymują uprawnienia SYSTEM_ALERT_WINDOW na żądanie

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ę na SYSTEM_ALERT_WINDOW, automatycznie otrzymuje to uprawnienie. Jeśli aplikacja utraci uprawnienia ROLE_CALL_SCREENING, utraci też uprawnienia.

  • Każda aplikacja, która przechwytuje zawartość ekranu za pomocą MediaProjection i prosi o zgodę na SYSTEM_ALERT_WINDOW, automatycznie otrzymuje to uprawnienie, chyba że użytkownik wyraźnie odmówi zgody. Gdy aplikacja przestanie rejestrować ekran, utraci to uprawnienie. Ten przypadek użycia jest przeznaczony głównie do aplikacji do strumieniowego przesyłania gier na żywo.

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. W intencji ignorowane są wszystkie dane package:.

W starszych wersjach Androida intencja ACTION_MANAGE_OVERLAY_PERMISSION mogła określać pakiet, który przekierowywał użytkownika do ekranu danej aplikacji służącego do zarządzania 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, których aplikacja używa do odczytywania 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 podanych na poniższej liście, poproś o uprawnienie READ_PHONE_NUMBERS zamiast o uprawnienie READ_PHONE_STATE.

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

  1. Zmień deklarację READ_PHONE_STATE tak, aby aplikacja używała tej zgody tylko w Androidzie 10 (poziom interfejsu API 29) i starszych.
  2. 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

Tworzenie aplikacji z uwzględnieniem najnowszych zmian dotyczących prywatności w Androidzie 11