Spezielle Berechtigungen anfordern

Eine besondere Berechtigung schützt den Zugriff auf Systemressourcen, die besonders sensibel sind oder keinen direkten Bezug zum Datenschutz von Nutzern haben. Diese Berechtigungen unterscheiden sich von Berechtigungen zur Installationszeit und Berechtigungen zur Laufzeit.

Abbildung 1: Der Bildschirm Spezieller App-Zugriff in den Systemeinstellungen.

Beispiele für spezielle Berechtigungen:

  • Exakte Wecker stellen
  • Einblenden und Zeichnen über anderen Apps
  • Zugriff auf alle Speicherdaten

Apps, die eine spezielle Berechtigung angeben, werden in den Systemeinstellungen auf der Seite Spezieller App-Zugriff angezeigt (Abbildung 1). Wenn ein Nutzer der App eine spezielle Berechtigung gewähren möchte, muss er diese Seite aufrufen: Einstellungen > Apps > Spezieller App-Zugriff.

Workflow

So beantragen Sie eine spezielle Berechtigung:

  1. Deklarieren Sie in der Manifestdatei Ihrer App die besonderen Berechtigungen, die Ihre App möglicherweise anfordern muss.
  2. Gestalten Sie die UX Ihrer App so, dass bestimmte Aktionen in Ihrer App mit bestimmten speziellen Berechtigungen verknüpft sind. Informieren Sie die Nutzer darüber, für welche Aktionen sie Ihrer App möglicherweise die Berechtigung zum Zugriff auf private Nutzerdaten erteilen müssen.
  3. Warten Sie, bis der Nutzer die Aufgabe oder Aktion in Ihrer App ausführt, für die Zugriff auf bestimmte personenbezogene Nutzerdaten erforderlich ist. Ihre App kann dann die spezielle Berechtigung anfordern, die für den Zugriff auf diese Daten erforderlich ist.
  4. Prüfen Sie, ob der Nutzer bereits die spezielle Berechtigung erteilt hat, die für Ihre App erforderlich ist. Verwenden Sie dazu die benutzerdefinierte Prüffunktion für jede Berechtigung. Wenn die Berechtigung gewährt wird, kann Ihre App auf die privaten Nutzerdaten zugreifen. Sollte dies nicht der Fall sein, fahren Sie mit dem nächsten Schritt fort. Hinweis: Sie müssen jedes Mal prüfen, ob Sie über die Berechtigung verfügen, wenn Sie einen Vorgang ausführen, für den diese Berechtigung erforderlich ist.
  5. Erläutern Sie dem Nutzer in einem UI-Element, auf welche Daten Ihre App zugreifen möchte und welche Vorteile die App für den Nutzer hat, wenn er die spezielle Berechtigung gewährt. Da Ihre App Nutzer zur Erteilung der Berechtigung an die Systemeinstellungen weiterleitet, sollten Sie außerdem eine kurze Anleitung dazu hinzufügen, wie Nutzer die Berechtigung dort gewähren können. Die Benutzeroberfläche mit der Begründung sollte dem Nutzer eine klare Option zum Deaktivieren der Berechtigung bieten. Nachdem der Nutzer die Begründung akzeptiert hat, fahren Sie mit dem nächsten Schritt fort.
  6. Anfordern der Sonderberechtigung, die Ihre App für den Zugriff auf die privaten Nutzerdaten benötigt. Dazu gehört wahrscheinlich eine Intent-Anfrage an die entsprechende Seite in den Systemeinstellungen, auf der der Nutzer die Berechtigung gewähren kann. Im Gegensatz zu Laufzeitberechtigungen wird kein Pop-up-Berechtigungsdialogfeld angezeigt.
  7. Prüfen Sie in der onResume()-Methode, ob der Nutzer die spezielle Berechtigung gewährt oder abgelehnt hat.
  8. Wenn der Nutzer Ihrer App die Berechtigung erteilt hat, können Sie auf die privaten Nutzerdaten zugreifen. Wenn der Nutzer die Berechtigung stattdessen abgelehnt hat, reduzieren Sie die Funktionalität Ihrer App, sodass der Nutzer Funktionen ohne die durch diese Berechtigung geschützten Daten nutzen kann.
Abbildung 2: Workflow zum Deklarieren und Anfordern spezieller Berechtigungen unter Android

Besondere Berechtigungen anfordern

Im Gegensatz zu Laufzeitberechtigungen müssen Nutzer spezielle Berechtigungen auf der Seite Spezieller App-Zugriff in den Systemeinstellungen gewähren. Apps können Nutzer über einen Intent dorthin weiterleiten. Dadurch wird die App pausiert und die entsprechende Seite mit den Einstellungen für eine bestimmte Berechtigung geöffnet. Wenn der Nutzer zur App zurückkehrt, kann die App prüfen, ob die Berechtigung in der onResume()-Funktion gewährt wurde.

Im folgenden Codebeispiel wird gezeigt, wie Sie die spezielle Berechtigung SCHEDULE_EXACT_ALARMS von Nutzern anfordern:

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))
   }
}

Beispielcode zum Prüfen der Berechtigung und zum Umgang mit Nutzerentscheidungen in 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(...)
   }
}

Best Practices und Tipps

In den folgenden Abschnitten finden Sie Best Practices und Hinweise zum Anfordern besonderer Berechtigungen.

Für jede Berechtigung gibt es eine eigene Prüfmethode.

Spezielle Berechtigungen funktionieren anders als Laufzeitberechtigungen. Lesen Sie stattdessen die Referenzseite zur Berechtigungs-API und verwenden Sie die Funktionen zur benutzerdefinierten Zugriffsprüfung für jede spezielle Berechtigung. Beispiele sind AlarmManager#canScheduleExactAlarms() für die Berechtigung SCHEDULE_EXACT_ALARMS und Environment#isExternalStorageManager() für die Berechtigung MANAGE_EXTERNAL_STORAGE.

Kontextbezogene Übersetzung anfordern

Ähnlich wie bei Laufzeitberechtigungen sollten Apps spezielle Berechtigungen kontextbezogen anfordern, wenn der Nutzer eine bestimmte Aktion anfordert, für die die Berechtigung erforderlich ist. Warten Sie beispielsweise, bis der Nutzer eine E-Mail für eine bestimmte Uhrzeit geplant hat, bevor Sie die Berechtigung SCHEDULE_EXACT_ALARMS anfordern.

Anfrage erläutern

Geben Sie einen Grund an, bevor Sie zur Systemkonfiguration weiterleiten. Da Nutzer die App vorübergehend verlassen, um spezielle Berechtigungen zu gewähren, sollten Sie eine In-App-Benutzeroberfläche anzeigen, bevor Sie den Intent zur Seite Spezieller App-Zugriff in den Systemeinstellungen starten. Auf dieser Benutzeroberfläche sollte klar erklärt werden, warum die App die Berechtigung benötigt und wie der Nutzer sie auf der Seite „Einstellungen“ gewähren kann.