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 Laufzeitberechtigungen.

Die Android-Systemeinstellungen „Spezieller App-Zugriff“ mit einer Liste von Apps und ihren speziellen Berechtigungsstatus.
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 speziellen Berechtigungen verknüpft sind. Informieren Sie Nutzer darüber, für welche Aktionen sie Ihrer App die Berechtigung zum Zugriff auf private Nutzerdaten gewähren 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. Geben Sie dem Nutzer in einem UI-Element eine Begründung, in der klar erläutert wird, 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 außerdem zu den Systemeinstellungen weiterleitet, um die Berechtigung zu erteilen, sollten Sie auch eine kurze Anleitung hinzufügen, in der erklärt wird, wie Nutzer die Berechtigung dort erteilen können. Die Benutzeroberfläche für die Begründung sollte dem Nutzer eine klare Option bieten, die Berechtigung nicht zu erteilen. Nachdem der Nutzer die Begründung zur Kenntnis genommen hat, fahren Sie mit dem nächsten Schritt fort.
  6. Fordern Sie die Sonderberechtigung an, die Ihre App für den Zugriff auf die privaten Nutzerdaten benötigt. Dabei wird wahrscheinlich eine Absicht an die entsprechende Seite in den Systemeinstellungen gesendet, auf der der Nutzer die Berechtigung erteilen kann. Im Gegensatz zu Laufzeitberechtigungen gibt es kein Berechtigungsdialogfeld.
  7. Prüfen Sie die Antwort des Nutzers – ob er die spezielle Berechtigung erteilt oder verweigert hat – in der onResume()-Methode.
  8. Wenn der Nutzer Ihrer App die Berechtigung gewährt hat, können Sie auf die privaten Nutzerdaten zugreifen. Wenn der Nutzer die Berechtigung abgelehnt hat, sollten Sie die App so anpassen, dass sie dem Nutzer auch ohne die durch die Berechtigung geschützten Informationen Funktionen zur Verfügung stellt.
Diagramm, das den Workflow für das Deklarieren und Anfordern von Sonderberechtigungen unter Android veranschaulicht, von der Manifestdeklaration über die Begründung für den Nutzer, die Weiterleitung zu den Systemeinstellungen und die Verarbeitung der Entscheidung des Nutzers.
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 gewähren. 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(...)
    }
}

Tipps zum Anfordern besonderer Berechtigungen

In den folgenden Abschnitten finden Sie Hinweise und Tipps zum Anfordern spezieller Berechtigungen.

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

Sonderberechtigungen funktionieren anders als Laufzeitberechtigungen. Verwenden Sie stattdessen die API-Referenzseite für Berechtigungen und die benutzerdefinierten Funktionen für die 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 erklärt werden, warum die App die Berechtigung benötigt und wie der Nutzer sie auf der Seite „Einstellungen“ erteilen kann.