Poproś o uprawnienia specjalne

Specjalne uprawnienia chronią dostęp do zasobów systemowych, które są szczególnie wrażliwe lub nie są bezpośrednio związane z prywatnością użytkownika. Te uprawnienia różnią się od uprawnień przyznawanych podczas instalacjiuprawnień przyznawanych podczas działania.

Rysunek 1. Ekran Specjalny dostęp do aplikacji w ustawieniach systemu.

Przykłady uprawnień specjalnych:

  • planowanie precyzyjnych alarmów,
  • Wyświetlanie i rysowanie nad innymi aplikacjami.
  • Dostęp do wszystkich danych w pamięci.

Aplikacje, które deklarują specjalne uprawnienia, są wyświetlane na stronie Specjalny dostęp do aplikacji w ustawieniach systemu (rysunek 1). Aby przyznać aplikacji specjalne uprawnienia, użytkownik musi otworzyć tę stronę: Ustawienia > Aplikacje > Specjalny dostęp do aplikacji.

Workflow

Aby poprosić o specjalne uprawnienia:

  1. W pliku manifestu aplikacji zadeklaruj specjalne uprawnienia, o które aplikacja może poprosić.
  2. Zaprojektuj interfejs użytkownika aplikacji tak, aby konkretne działania w niej były powiązane z określonymi uprawnieniami specjalnymi. Informuj użytkowników, które działania mogą wymagać przyznania aplikacji uprawnień dostępu do prywatnych danych użytkownika.
  3. Poczekaj, aż użytkownik wywoła w aplikacji zadanie lub działanie, które wymaga dostępu do określonych prywatnych danych użytkownika. W tym momencie aplikacja może poprosić o specjalne uprawnienia wymagane do uzyskania dostępu do tych danych.
  4. Sprawdź, czy użytkownik przyznał już specjalne uprawnienia wymagane przez Twoją aplikację. W tym celu użyj funkcji sprawdzania niestandardowego każdego uprawnienia. Jeśli użytkownik wyrazi zgodę, aplikacja będzie mieć dostęp do prywatnych danych użytkownika. Jeśli nie, przejdź do następnego. Uwaga: za każdym razem, gdy wykonujesz operację wymagającą uprawnień, musisz sprawdzić, czy je masz.
  5. Wyświetlaj użytkownikowi uzasadnienie w elemencie interfejsu, który jasno wyjaśnia, do jakich danych aplikacja próbuje uzyskać dostęp i jakie korzyści może przynieść użytkownikowi, jeśli przyzna on specjalne uprawnienia. Dodatkowo, ponieważ aplikacja kieruje użytkowników do ustawień systemu, aby przyznali uprawnienia, podaj też krótkie instrukcje, które wyjaśniają, jak to zrobić. Interfejs uzasadnienia powinien zawierać wyraźną opcję rezygnacji z przyznania uprawnień. Gdy użytkownik zaakceptuje uzasadnienie, przejdź do następnego kroku.
  6. Poproś o specjalne uprawnienia, których Twoja aplikacja potrzebuje, aby uzyskać dostęp do prywatnych danych użytkownika. Prawdopodobnie wiąże się to z przekierowaniem do odpowiedniej strony w ustawieniach systemu, na której użytkownik może przyznać uprawnienia. W przeciwieństwie do uprawnień czasu działania nie ma wyskakującego okna z prośbą o przyznanie uprawnień.
  7. Sprawdź odpowiedź użytkownika – czy przyznał specjalne uprawnienia, czy odmówił ich przyznania – w metodzie onResume().
  8. Jeśli użytkownik przyznał aplikacji uprawnienia, możesz uzyskać dostęp do prywatnych danych użytkownika. Jeśli użytkownik odmówi udzielenia uprawnień, łagodnie ogranicz funkcjonalność aplikacji, aby zapewniała użytkownikowi funkcje bez informacji chronionych przez te uprawnienia.
Rysunek 2. Przepływ pracy związany z deklarowaniem i żądaniem specjalnych uprawnień na Androidzie.

Prośba o uprawnienia specjalne

W przeciwieństwie do uprawnień czasu działania użytkownik musi przyznać specjalne uprawnienia na stronie Aplikacje ze specjalnym dostępem w ustawieniach systemu. Aplikacje mogą wysyłać tam użytkowników za pomocą intencji, która wstrzymuje działanie aplikacji i uruchamia odpowiednią stronę ustawień dla danego uprawnienia specjalnego. Gdy użytkownik wróci do aplikacji, może ona sprawdzić, czy uprawnienie zostało przyznane, za pomocą funkcji onResume().

Poniższy przykładowy kod pokazuje, jak poprosić użytkowników o specjalne uprawnienie SCHEDULE_EXACT_ALARMS:

val alarmManager = getSystemService<AlarmManager>()!!
when {
   // if permission is granted, proceed with scheduling exact alarms…
   alarmManager.canScheduleExactAlarms() -> {
       alarmManager.setExact(...)
   }
   else -> {
       // ask users to grant the permission in the corresponding settings page
       startActivity(Intent(ACTION_REQUEST_SCHEDULE_EXACT_ALARM))
   }
}

Przykładowy kod do sprawdzania uprawnień i obsługi decyzji użytkownika w onResume():

override fun onResume() {
   // ...

   if (alarmManager.canScheduleExactAlarms()) {
       // proceed with the action (setting exact alarms)
       alarmManager.setExact(...)
   }
   else {
       // permission not yet approved. Display user notice and gracefully degrade
       your app experience.
       alarmManager.setWindow(...)
   }
}

Sprawdzone metody i wskazówki

W sekcjach poniżej znajdziesz sprawdzone metody i wskazówki dotyczące przesyłania próśb o specjalne uprawnienia.

Każde uprawnienie ma własną metodę sprawdzania.

Uprawnienia specjalne działają inaczej niż uprawnienia w czasie działania. Zamiast tego zapoznaj się ze stroną referencyjną interfejsu Permissions API i użyj funkcji niestandardowego sprawdzania dostępu w przypadku każdego uprawnienia specjalnego. Przykłady to AlarmManager#canScheduleExactAlarms() w przypadku uprawnienia SCHEDULE_EXACT_ALARMS oraz Environment#isExternalStorageManager() w przypadku uprawnienia MANAGE_EXTERNAL_STORAGE.

Żądanie w kontekście

Podobnie jak w przypadku uprawnień w czasie działania aplikacje powinny prosić o uprawnienia specjalne w kontekście, gdy użytkownik zażąda konkretnego działania, które wymaga tych uprawnień. Na przykład poczekaj z prośbą o uprawnienie SCHEDULE_EXACT_ALARMS, aż użytkownik zaplanuje wysłanie e-maila o określonej godzinie.

Wyjaśnij prośbę

Przed przekierowaniem do ustawień systemowych podaj uzasadnienie. Użytkownicy tymczasowo opuszczają aplikację, aby przyznać specjalne uprawnienia, dlatego przed uruchomieniem intencji przejścia na stronę Aplikacje ze specjalnym dostępem w ustawieniach systemu wyświetl interfejs w aplikacji. W tym interfejsie należy jasno wyjaśnić, dlaczego aplikacja potrzebuje uprawnień, i podać instrukcje, jak użytkownik powinien je przyznać na stronie ustawień.