Aktualizacje uprawnień w Androidzie 11

Android 11 umożliwia użytkownikom bardziej szczegółowe określanie uprawnień dotyczących lokalizacji, mikrofonu i aparatu. Dodatkowo system resetuje uprawnienia nieużywanych aplikacji kierowanych na Androida 11 lub nowszego. Może też być konieczne zaktualizowanie zadeklarowanych uprawnień, jeśli korzystają z okna alertów systemowych lub odczytują informacje związane z numerami telefonów.

Uprawnienia jednorazowe

Od Androida 11 za każdym razem, gdy aplikacja prosi o uprawnienia dotyczące lokalizacji, mikrofonu lub aparatu, w oknie z uprawnieniami widocznymi dla użytkownika pojawi się opcja Tylko tym razem. Jeśli użytkownik wybierze tę opcję w oknie, aplikacja otrzyma tymczasowe jednorazowe uprawnienie.

Dowiedz się więcej o tym, jak system obsługuje uprawnienia jednorazowe.

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 poufne uprawnienia czasu działania, które użytkownik przyznał aplikacji. Działa to tak samo jak w przypadku wyświetlenia uprawnienia w ustawieniach systemu i zmiany poziomu dostępu aplikacji na Odmów. Jeśli Twoja aplikacja jest zgodna ze sprawdzonymi metodami prośby o uprawnienia w czasie działania, nie musisz wprowadzać w niej żadnych zmian. Ponieważ użytkownik wchodzi w interakcje z funkcjami aplikacji, należy sprawdzić, czy funkcje mają wymagane uprawnienia.

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

Widoczność okna uprawnień

Jeśli w Androidzie 11 użytkownik kliknie Odmów, aby uzyskać dostęp do określonych uprawnień więcej niż raz w trakcie instalacji aplikacji na urządzeniu, nie zobaczy okna z uprawnieniami systemowymi, gdy aplikacja ponownie poprosi o to uprawnienie. Czynność użytkownika oznacza, że nie pytaj ponownie. W poprzednich wersjach za każdym razem, gdy aplikacja prosi o przyznanie uprawnień, użytkownik zobaczył okno uprawnień systemowych, chyba że wcześniej zaznaczył pole wyboru lub opcję „Nie pytaj ponownie”. Ta zmiana sposobu działania w Androidzie 11 zniechęca do powtarzających się próśb o przyznanie uprawnień, których użytkownicy odmówili przyznania.

Aby sprawdzić, czy aplikacji nie przyznano trwale uprawnień (do celów debugowania i testowania), użyj tego polecenia:

adb shell dumpsys package PACKAGE_NAME

Gdzie PACKAGE_NAME to nazwa przesyłki do sprawdzenia.

Dane wyjściowe polecenia zawierają takie sekcje:

...
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 odrzucone raz przez użytkownika są oznaczane przez USER_SET. Uprawnienia, które zostały trwale odrzucone przez dwukrotne zaznaczenie opcji Odmów, są oznaczane przez USER_FIXED.

Podczas testowania możesz zresetować te flagi, aby mieć pewność, że testerzy nie będą zaskoczeni, gdy okno żądania nie pojawi się. 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 informacjami o interfejsie API uprawnień.

Dowiedz się więcej o tym, jak poradzić sobie z odmową uprawnień w aplikacji.

Zmiany w oknie alertu systemowego

Android 11 wprowadza kilka zmian w sposobie przyznawania aplikacjom uprawnień SYSTEM_ALERT_WINDOW. Te zmiany mają na celu ochronę użytkowników przez celowe przyznawanie uprawnień.

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

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

  • Każda aplikacja, która korzysta z interfejsu ROLE_CALL_SCREENING i żąda dostępu do SYSTEM_ALERT_WINDOW, automatycznie otrzymuje to uprawnienie. Jeśli aplikacja utraci dostęp do ROLE_CALL_SCREENING, utraci te uprawnienia.

  • Każda aplikacja, która rejestruje zawartość ekranu za pomocą MediaProjection i prosi o SYSTEM_ALERT_WINDOW, automatycznie otrzymuje te uprawnienia, chyba że użytkownik wyraźnie odmówi ich przyznania. Gdy aplikacja przestanie tworzyć zrzuty ekranu, traci te uprawnienia. Ten przypadek użycia jest przeznaczony przede wszystkim do transmisji na żywo z gier.

Te aplikacje nie muszą wysyłać żądania ACTION_MANAGE_OVERLAY_PERMISSION, aby uzyskać uprawnienie SYSTEM_ALERT_WINDOW. Aplikacje mogą po prostu poprosić o dostęp bezpośrednio do usługi SYSTEM_ALERT_WINDOW.

Intencje MANAGE_OVERLAY_PERMISSION zawsze powodują wyświetlenie ekranu uprawnień systemowych użytkownika

Począwszy od Androida 11 zamiary ACTION_MANAGE_OVERLAY_PERMISSION zawsze powodują wyświetlenie ekranu Ustawienia najwyższego poziomu, gdzie może on przyznawać i anulować uprawnienia SYSTEM_ALERT_WINDOW aplikacji. Wszystkie dane package: w intencji są ignorowane.

We wcześniejszych wersjach Androida intencja ACTION_MANAGE_OVERLAY_PERMISSION mogła określić pakiet, który powodował wyświetlenie użytkownikowi ekranu aplikacji, na którym można 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ąć swoje uprawnienia. Ta zmiana ma na celu ochronę użytkowników przez celowe przyznawanie 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 numerów telefonów wymienionych na poniższej liście, musisz poprosić o uprawnienie READ_PHONE_NUMBERS, a nie o uprawnienie READ_PHONE_STATE.

Jeśli Twoja aplikacja deklaruje użycie metody READ_PHONE_STATE do wywoływania metod innych niż wymienione na poprzedniej liście, możesz nadal żądać 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, tak aby aplikacja używała uprawnień tylko na Androidzie 10 (poziom interfejsu API 29) i starszych.
  2. Dodaj uprawnienie READ_PHONE_NUMBERS.

Ten proces przedstawia ten 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 uprawnień w Androidzie 11 znajdziesz w tych materiałach:

Filmy

Opracowywanie z uwzględnieniem najnowszych zmian w ochronie prywatności w Androidzie 11