Poproś o uprawnienia specjalne

Uprawnienia specjalne 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ń podczas instalacji i uprawnień w czasie działania (aplikacji).

Ekran „Specjalny dostęp do aplikacji” w ustawieniach systemu Android, na którym widać listę aplikacji i ich specjalne uprawnienia.
Rysunek 1. Ekran Specjalny dostęp do aplikacji w ustawieniach systemu.

Przykłady uprawnień specjalnych:

  • Planowanie alarmów precyzyjnych.
  • wyświetlanie nad innymi aplikacjami,
  • Dostęp do wszystkich danych w pamięci.

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

Przepływ pracy

Aby poprosić o specjalne uprawnienia:

  1. W pliku manifestu aplikacji zadeklaruj uprawnienia specjalne, o które aplikacja może prosić.
  2. Zaprojektuj interfejs aplikacji tak, aby konkretne działania w aplikacji były powiązane z określonymi uprawnieniami specjalnymi. Poinformuj 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. Wtedy aplikacja może poprosić o specjalne uprawnienia wymagane do uzyskania dostępu do tych danych.
  4. Sprawdź, czy użytkownik przyznał już specjalne uprawnienia, których wymaga Twoja aplikacja. W tym celu użyj funkcji niestandardowego sprawdzania każdego uprawnienia. Jeśli użytkownik wyrazi zgodę, aplikacja będzie mogła uzyskać dostęp do jego danych prywatnych. Jeśli nie, przejdź do następnego. Uwaga: musisz sprawdzać, czy masz uprawnienia, za każdym razem, gdy wykonujesz operację, która ich wymaga.
  5. Przedstaw 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 mu zapewnić, jeśli przyzna jej specjalne uprawnienia. Ponieważ aplikacja przekierowuje użytkowników do ustawień systemowych, aby przyznali uprawnienia, dołącz też krótkie instrukcje wyjaśniające, jak mogą to zrobić. Interfejs z wyjaśnieniem powinien zawierać wyraźną opcję rezygnacji z przyznania uprawnień. Gdy użytkownik potwierdzi, że zapoznał się z uzasadnieniem, przejdź do następnego kroku.
  6. Poproś o specjalne uprawnienia, których aplikacja wymaga, aby uzyskać dostęp do prywatnych danych użytkownika. Prawdopodobnie wymaga to intencji do odpowiedniej strony w ustawieniach systemowych, na której użytkownik może przyznać uprawnienia. W przeciwieństwie do uprawnień w czasie działania nie ma okna uprawnień.
  7. Sprawdź odpowiedź użytkownika (czy przyznał uprawnienia specjalne, czy ich odmówił) w metodzie onResume().
  8. Jeśli użytkownik przyznał uprawnienia aplikacji, możesz uzyskać dostęp do prywatnych danych użytkownika. Jeśli użytkownik odmówił przyznania uprawnień, przeprowadź łagodną degradację aplikacji, aby zapewnić użytkownikowi funkcjonalność bez informacji chronionych przez te uprawnienia.
Diagram przedstawiający proces deklarowania i żądania uprawnień specjalnych na Androidzie, od deklaracji w pliku manifestu po uzasadnienie dla użytkownika, przekierowanie do ustawień systemowych i obsługę decyzji użytkownika.
Rysunek 2. Proces deklarowania i żądania uprawnień specjalnych na Androidzie.

Prośba o specjalne uprawnienia

W odróżnieniu od uprawnień w czasie działania aplikacji uprawnienia specjalne muszą zostać przyznane przez użytkownika na stronie Aplikacje ze specjalnym dostępem w ustawieniach systemu. Aplikacje mogą wysyłać tam użytkowników za pomocą intencji, która wstrzymuje aplikację 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 w funkcji onResume().

Poniższy przykładowy kod pokazuje, jak poprosić użytkowników o przyznanie uprawnień specjalnych 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żytkowników 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(...)
    }
}

Wskazówki dotyczące próśb o specjalne uprawnienia

W poniższych sekcjach znajdziesz wskazówki i kwestie, które należy wziąć pod uwagę, gdy prosisz o uprawnienia specjalne.

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

Uprawnienia specjalne działają inaczej niż uprawnienia w czasie działania aplikacji. Zamiast tego zapoznaj się ze stroną z dokumentacją interfejsu API uprawnień i użyj niestandardowych funkcji sprawdzania dostępu dla każdego uprawnienia specjalnego. Przykłady: AlarmManager#canScheduleExactAlarms() dla uprawnienia SCHEDULE_EXACT_ALARMS i Environment#isExternalStorageManager() dla uprawnienia MANAGE_EXTERNAL_STORAGE.

Prośba w kontekście

Podobnie jak w przypadku uprawnień w czasie działania aplikacji, aplikacje powinny prosić o specjalne uprawnienia w kontekście, gdy użytkownik żąda określonego działania, które wymaga uprawnień. Na przykład poczekaj z prośbą o uprawnienie SCHEDULE_EXACT_ALARMS, dopóki użytkownik nie zaplanuje wysłania 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 na stronie Aplikacje ze specjalnym dostępem w ustawieniach systemu wyświetl interfejs w aplikacji. Ten interfejs powinien jasno wyjaśniać, dlaczego aplikacja potrzebuje uprawnień i jak użytkownik powinien je przyznać na stronie ustawień.