Spezielle Berechtigungen anfordern

Eine besondere Berechtigung schützt den Zugriff auf Systemressourcen, die besonders sensibel sind oder nicht direkt mit dem Datenschutz für Nutzer zusammenhängen. Diese Berechtigungen unterscheiden sich von Berechtigungen bei der Installation und Laufzeitberechtigungen.

Bildschirm „Spezieller App-Zugriff“ in den Android-Systemeinstellungen 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
  • Einblenden und Zeichnen ü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 die Seite Einstellungen > Apps > Spezieller App-Zugriff aufrufen.

Workflow

So fordern Sie eine Sonderberechtigung an:

  1. Deklarieren Sie in der Manifestdatei Ihrer App die speziellen Berechtigungen, die Ihre App möglicherweise anfordern muss.
  2. Gestalte die User Experience (UX) deiner App so, dass bestimmte Aktionen in deiner App mit bestimmten Sonderberechtigungen verknüpft sind. Informieren Sie die Nutzer darüber, bei welchen Aktionen sie Ihrer App möglicherweise die Berechtigung erteilen müssen, auf private Nutzerdaten zuzugreifen.
  3. Warte, bis der Nutzer die Aufgabe oder Aktion in deiner App aufruft, für die Zugriff auf bestimmte private Nutzerdaten erforderlich ist. Zu diesem Zeitpunkt kann Ihre App die spezielle Berechtigung anfordern, die für den Zugriff auf diese Daten erforderlich ist.
  4. Prüfen Sie, ob der Nutzer die von Ihrer App benötigte Sonderberechtigung bereits gewährt hat. Verwenden Sie dazu die benutzerdefinierte Prüffunktion der jeweiligen 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 die Berechtigung haben, wenn Sie einen Vorgang ausführen, für den diese Berechtigung erforderlich ist.
  5. Präsentiere dem Nutzer in einem UI-Element eine Begründung, in der klar erklärt wird, auf welche Daten deine App zugreifen möchte und welche Vorteile die App dem Nutzer bieten kann, wenn er die Sonderberechtigung gewährt. Da Nutzer in Ihrer App zu den Systemeinstellungen weitergeleitet werden, 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 Begründungsoberfläche sollte dem Nutzer eine klare Option bieten, die Berechtigung nicht zu erteilen. Nachdem der Nutzer die Begründung bestätigt hat, fahre mit dem nächsten Schritt fort.
  6. Fordern Sie die spezielle Berechtigung an, die Ihre App für den Zugriff auf die privaten Nutzerdaten benötigt. Dazu wird wahrscheinlich ein Intent an die entsprechende Seite in den Systemeinstellungen gesendet, auf der der Nutzer die Berechtigung erteilen kann. Im Gegensatz zu Laufzeitberechtigungen gibt es kein Dialogfeld für Berechtigungen.
  7. Prüfe in der Methode onResume() die Antwort des Nutzers, d. h. ob er die Sonderberechtigung gewährt oder verweigert hat.
  8. Wenn der Nutzer Ihrer App die Berechtigung erteilt hat, können Sie auf die privaten Nutzerdaten zugreifen. Wenn der Nutzer die Berechtigung verweigert hat, sorgen Sie für eine graduelle Fehlertoleranz, damit Ihre App dem Nutzer Funktionen ohne die durch diese Berechtigung geschützten Informationen bietet.
Diagramm, das den Workflow zum Deklarieren und Anfordern von Sonderberechtigungen unter Android veranschaulicht, von der Deklaration im Manifest über die Begründung für den Nutzer und die Weiterleitung zu den Systemeinstellungen bis hin zur Verarbeitung der Entscheidung des Nutzers.
Abbildung 2. Workflow zum Deklarieren und Anfordern von Sonderberechtigungen 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 mithilfe eines Intents dorthin weiterleiten. Dadurch wird die App pausiert und die entsprechende Einstellungsseite für eine bestimmte Sonderberechtigung wird gestartet. Nachdem der Nutzer zur App zurückgekehrt ist, kann die App in der Funktion onResume() prüfen, ob die Berechtigung gewährt wurde.

Der folgende Beispielcode 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 Beantragen besonderer Berechtigungen

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

Jede Berechtigung hat eine eigene Prüfmethode.

Spezielle Berechtigungen funktionieren anders als Laufzeitberechtigungen. Sehen Sie sich stattdessen die Referenzseite zur Berechtigungs-API an und verwenden Sie 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. Warten Sie beispielsweise mit der Anforderung der Berechtigung SCHEDULE_EXACT_ALARMS, bis der Nutzer eine E-Mail für den Versand zu einem bestimmten Zeitpunkt plant.

Anfrage erklären

Geben Sie eine Begründung an, bevor Sie den Nutzer zu den Systemeinstellungen weiterleiten. Da Nutzer die App vorübergehend verlassen, um spezielle Berechtigungen zu gewähren, solltest du eine In-App-Benutzeroberfläche einblenden, bevor du den Intent für die Seite Spezieller App-Zugriff in den Systemeinstellungen startest. In dieser Benutzeroberfläche sollte klar erklärt werden, warum die App die Berechtigung benötigt und wie der Nutzer sie auf der Einstellungsseite gewähren kann.