Spezielle Berechtigungen anfordern

Eine besondere Berechtigung schützt den Zugriff auf Systemressourcen, die besonders vertraulich sind oder nicht direkt mit dem Datenschutz der Nutzer zusammenhängen. 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 Alarme planen
  • Anzeigen und Einblenden über anderen Apps
  • Zugriff auf alle Speicherdaten.

Apps, die eine spezielle Berechtigung deklarieren, werden in den Systemeinstellungen auf der Seite Spezieller App-Zugriff angezeigt (Abbildung 1). Wenn ein Nutzer der App eine spezielle Berechtigung erteilen 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 speziellen Berechtigungen, die Ihre App möglicherweise anfordern muss.
  2. Gestalten Sie die Benutzeroberfläche Ihrer App so, dass bestimmte Aktionen in Ihrer App mit bestimmten Sonderberechtigungen verknüpft sind. Informieren Sie 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 aufruft, für die Zugriff auf bestimmte private Nutzerdaten erforderlich ist. Zu diesem Zeitpunkt kann Ihre App die Sonderberechtigung anfordern, die für den Zugriff auf diese Daten erforderlich ist.
  4. Prüfen Sie, ob der Nutzer die spezielle Berechtigung, die Ihre App benötigt, bereits erteilt hat. Verwenden Sie dazu die benutzerdefinierte Prüffunktion für jede Berechtigung. Wenn die Berechtigung erteilt 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 die Berechtigung haben, wenn Sie einen Vorgang ausführen, für den diese Berechtigung erforderlich ist.
  5. Begründung für den Nutzer: In einem UI-Element muss klar erklärt werden, auf welche Daten Ihre App zugreifen möchte und welche Vorteile die App dem Nutzer bieten kann, wenn er die spezielle Berechtigung erteilt. Da Ihre App Nutzer zur Erteilung der Berechtigung zu den Systemeinstellungen weiterleitet, sollten Sie dort auch eine kurze Anleitung dazu einfügen. Die Benutzeroberfläche für die Begründung sollte dem Nutzer eine klare Option bieten, die Berechtigung nicht zu erteilen. Fahren Sie mit dem nächsten Schritt fort, nachdem der Nutzer die Begründung zur Kenntnis genommen hat.
  6. Fordern Sie die Sonderberechtigung an, die Ihre App für den Zugriff auf die privaten Nutzerdaten benötigt. Dabei wird wahrscheinlich eine Absicht zur entsprechenden Seite in den Systemeinstellungen ausgelöst, auf der der Nutzer die Berechtigung erteilen kann. Im Gegensatz zu Laufzeitberechtigungen gibt es kein Pop-up-Dialogfeld für Berechtigungen.
  7. Prüfen Sie die Antwort des Nutzers – ob er die spezielle Berechtigung erteilt oder abgelehnt hat – in der Methode onResume().
  8. Wenn der Nutzer Ihrer App die Berechtigung gewährt hat, können Sie auf die privaten Nutzerdaten zugreifen. Wenn der Nutzer die Berechtigung stattdessen abgelehnt hat, sollten Sie die App-Nutzung so anpassen, dass sie dem Nutzer auch ohne die durch diese Berechtigung geschützten Informationen Funktionen bietet.
Abbildung 2. Workflow zum Deklarieren und Anfordern spezieller Berechtigungen unter Android.

Besondere Berechtigungen anfordern

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

Das folgende Codebeispiel zeigt, wie Sie die Sonderberechtigung 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 Verarbeiten von 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 einige Best Practices und Überlegungen zum Anfordern spezieller Berechtigungen.

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

Sonderberechtigungen funktionieren anders als Laufzeitberechtigungen. Verwenden Sie stattdessen die API-Referenz für Berechtigungen und die benutzerdefinierten Funktionen zur 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 Anfrage

Ähnlich wie bei Laufzeitberechtigungen sollten Apps spezielle Berechtigungen im Kontext anfordern, wenn der Nutzer eine bestimmte Aktion anfordert, für die die Berechtigung erforderlich ist. Fordern Sie die Berechtigung SCHEDULE_EXACT_ALARMS beispielsweise erst an, wenn der Nutzer eine E‑Mail plant, die zu einem bestimmten Zeitpunkt gesendet werden soll.

Anfrage erläutern

Geben Sie eine Begründung an, bevor Sie zu den Systemeinstellungen weiterleiten. Da Nutzer die App vorübergehend verlassen, um spezielle Berechtigungen zu erteilen, sollten Sie eine In-App-Benutzeroberfläche anzeigen, bevor Sie den Intent für die Seite Spezieller App-Zugriff in den Systemeinstellungen starten. In dieser Benutzeroberfläche sollte klar erläutert werden, warum die App die Berechtigung benötigt und wie der Nutzer sie auf der Seite „Einstellungen“ erteilen kann.