Aktualizacje uprawnień w Androidzie 11

Android 11 umożliwia użytkownikom bardziej szczegółowe 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.

Jednorazowe uprawnienia

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 dialogowym, 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 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 proszenia o uprawnienia w czasie działania, nie musisz w niej wprowadzać żadnych zmian. Podczas interakcji użytkownika z funkcjami aplikacji musisz sprawdzić, czy mają one odpowiednie uprawnienia.

Dowiedz się więcej o tym, jak system automatycznie resetuje uprawnienia nieużywanych aplikacji.

Wyświetlanie okna z prośbą o uprawnienia

Od Androida 11 w górę, jeśli użytkownik więcej niż raz podczas instalacji aplikacji na urządzeniu kliknie Odmów w przypadku określonego uprawnienia, nie zobaczy on okna uprawnień systemu, jeśli aplikacja ponownie poprosi o to uprawnienie. Działania użytkownika wskazują, że nie chce, abyśmy pytali ponownie. W poprzednich wersjach użytkownicy widzieli okno uprawnień systemu za każdym razem, gdy aplikacja prosiła o uprawnienia, chyba że wcześniej zaznaczono pole wyboru „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 uprawnienia zostały trwale odrzucone (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 o takim wyglądzie:

...
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ł, są oznaczone ikoną USER_SET. Uprawnienia, które zostały trwale odrzucone po dwukrotnym wybraniu opcji Odrzuć, są oznaczone ikoną 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 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ć. Pełną listę uprawnień aplikacji na Androida znajdziesz na stronie z dokumentacją interfejsu API uprawnień.

Dowiedz się więcej o rozwiązywaniu problemów z odmową udzielenia uprawnień w aplikacji.

Zmiany w oknie alertu systemowego

W Androidzie 11 wprowadzono kilka zmian w przyznawaniu aplikacji uprawnień SYSTEM_ALERT_WINDOW. Celem tych zmian jest ochrona użytkowników poprzez utrudnienie przyznawania uprawnień.

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

Niektóre klasy aplikacji otrzymują automatycznie uprawnienie SYSTEM_ALERT_WINDOW na żądanie:

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

  • Każda aplikacja, która rejestruje obraz z ekranu za pomocą interfejsu MediaProjection i wysyła żądanie SYSTEM_ALERT_WINDOW, otrzymuje uprawnienia automatycznie, chyba że użytkownik wyraźnie je odrzuci. Gdy aplikacja przestanie rejestrować obraz z ekranu, utraci te uprawnienia. Ten przypadek użycia jest przeznaczony głównie do aplikacji do strumieniowego przesyłania gier na żywo.

Te aplikacje nie muszą wysyłać ACTION_MANAGE_OVERLAY_PERMISSION, aby uzyskać uprawnienie SYSTEM_ALERT_WINDOW. Mogą po prostu bezpośrednio poprosić o SYSTEM_ALERT_WINDOW.

Intencje MANAGE_OVERLAY_PERMISSION zawsze przekierowują użytkownika do ekranu uprawnień systemowych.

Począwszy od Androida 11 intencjeACTION_MANAGE_OVERLAY_PERMISSION zawsze przekierowują użytkownika do najwyższego poziomu ekranu Ustawienia, na którym użytkownik może przyznać lub cofnąćSYSTEM_ALERT_WINDOW uprawnienia aplikacji. Dane package: w intencji są ignorowane.

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 w Androidzie 11. Zamiast tego użytkownik musi najpierw wybrać aplikację, której chce przyznać lub odmówić uprawnień. Ta zmiana ma na celu ochronę użytkowników poprzez umożliwienie im bardziej świadomego udzielania uprawnień.

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 numeru telefonu wymienionych na tej liście, musisz poprosić o uprawnienie READ_PHONE_NUMBERS, a nie 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.

Poniżej znajduje się fragment deklaracji pliku manifestu, który pokazuje 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 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