Alle Dateien auf einem Speichergerät verwalten

Die meisten Anwendungen, die Zugriff auf freigegebenen Speicher benötigen, können sich an die Best Practices für die Freigabe von Mediendateien und die Freigabe von Nicht-Mediendateien halten. Einige Apps haben jedoch einen grundlegenden Anwendungsfall, der einen umfassenden Zugriff auf Dateien auf einem Gerät erfordert, aber mit den Best Practices für datenschutzfreundliche Speicherung nicht effizient darauf zugreifen kann. Android bietet für diese Situationen einen speziellen App-Zugriff namens Zugriff auf alle Dateien.

Der primäre Anwendungsfall einer Antivirenanwendung kann beispielsweise das regelmäßige Scannen vieler Dateien in verschiedenen Verzeichnissen erfordern. Wenn bei diesem Scan wiederholte Nutzerinteraktionen zur Auswahl von Verzeichnissen mit der Systemdateiauswahl erforderlich sind, ist dies für die Nutzer sehr ärgerlich. Andere Anwendungsfälle – z. B. Dateimanager-Apps, Sicherungs- und Wiederherstellungsanwendungen und Anwendungen zur Dokumentverwaltung – erfordern ähnliche Überlegungen.

Zugriff auf alle Dateien anfordern

So kann eine App vom Nutzer den Zugriff auf alle Dateien anfordern:

  1. Deklariere im Manifest die Berechtigung MANAGE_EXTERNAL_STORAGE.
  2. Verwenden Sie die Intent-Aktion ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION, um Nutzer zu einer Seite mit Systemeinstellungen weiterzuleiten, auf der sie die Option Zugriff zum Verwalten aller Dateien zulassen für Ihre App aktivieren können.

Wenn Sie prüfen möchten, ob Ihrer App die Berechtigung MANAGE_EXTERNAL_STORAGE gewährt wurde, rufen Sie Environment.isExternalStorageManager() auf.

Von MANAGE_EXTERNAL_STORAGE zugelassene Vorgänge

Die Berechtigung MANAGE_EXTERNAL_STORAGE gewährt Folgendes:

  • Lese- und Schreibzugriff auf alle Dateien im freigegebenen Speicher.

  • Zugriff auf den Inhalt der Tabelle MediaStore.Files.

  • Zugriff auf das Stammverzeichnis des OTG-Laufwerks (OTG) für unterwegs und der SD-Karte

  • Schreibzugriff auf alle internen Speicherverzeichnisse mit Ausnahme von /Android/data/, /sdcard/Android und den meisten Unterverzeichnissen von /sdcard/Android. Dieser Schreibzugriff umfasst auch den direkten Dateipfad.

    Anwendungen, denen diese Berechtigung gewährt wurde, können immer noch nicht auf die anwendungsspezifischen Verzeichnisse anderer Anwendungen zugreifen, da diese Verzeichnisse als Unterverzeichnisse von Android/data/ auf einem Speicher-Volume angezeigt werden.

Mit der Berechtigung MANAGE_EXTERNAL_STORAGE kann eine Anwendung entweder über die MediaStore API oder über direkte Dateipfade auf diese zusätzlichen Dateien und Verzeichnisse zugreifen. Wenn Sie das Storage Access Framework verwenden, können Sie jedoch nur dann auf eine Datei oder ein Verzeichnis zugreifen, wenn Sie dies ohne die Berechtigung MANAGE_EXTERNAL_STORAGE tun können.

Speicherverwaltungsaktivität einer anderen App aufrufen

Unter Android 12 (API-Level 31) und höher können Apps, die sowohl die Berechtigung MANAGE_EXTERNAL_STORAGE als auch die Berechtigung QUERY_ALL_PACKAGES haben, z. B. Apps zur Dateiverwaltung, die getManageSpaceActivityIntent() verwenden, um Nutzer an die benutzerdefinierte Gruppenbereichsverwaltungsaktivität einer anderen App weiterzuleiten.

Die Methode getManageSpaceActivityIntent() nimmt einen Paketnamen und einen Anfragecode an und gibt einen der folgenden Werte zurück:

  • Ein PendingIntent, wenn für die App mit dem angegebenen Paketnamen eine benutzerdefinierte Aktivität „Speicherplatz verwalten“ definiert ist. Die Dateiverwaltungsanwendung, die die Methode getManageSpaceActivityIntent() aufgerufen hat, kann dann den zurückgegebenen Intent aufrufen, um Nutzer zur benutzerdefinierten Aktivität weiterzuleiten.
  • null, wenn die App mit dem angegebenen Paketnamen keine Aktivität zum Verwalten des Gruppenbereichs definiert.

MANAGE_EXTERNAL_STORAGE für Tests aktivieren

Wenn Sie herausfinden möchten, wie sich die Berechtigung MANAGE_EXTERNAL_STORAGE auf Ihre App auswirkt, können Sie die Berechtigung zu Testzwecken aktivieren. Führen Sie dazu den folgenden Befehl auf dem Computer aus, der mit dem Testgerät verbunden ist:

adb shell appops set --uid PACKAGE_NAME MANAGE_EXTERNAL_STORAGE allow

Google Play-Hinweis

Dieser Abschnitt enthält Hinweise für Entwickler, die Apps bei Google Play veröffentlichen.

Um den umfassenden Zugriff auf gemeinsamen Speicher einzuschränken, hat der Google Play Store seine Richtlinie aktualisiert. Apps, die auf Android 11 (API-Level 30) oder höher ausgerichtet sind, werden geprüft und mit der Berechtigung MANAGE_EXTERNAL_STORAGE wird der Zugriff auf alle Dateien angefordert. Diese Richtlinie gilt seit Mai 2021.

Wenn deine App auf Android 11 oder höher ausgerichtet ist und die Berechtigung MANAGE_EXTERNAL_STORAGE deklariert wird, wird in Android Studio die Lint-Warnung in Abbildung 1 angezeigt. Mit dieser Warnung werden Sie daran erinnert, dass es im Google Play Store eine Richtlinie gibt, die die Nutzung der Berechtigung einschränkt.

Abbildung 1. Lint-Warnung in Android Studio, die Entwickler an die Google Play-Richtlinie in Bezug auf die Berechtigung MANAGE_EXTERNAL_STORAGE erinnert.

Fordern Sie die Berechtigung MANAGE_EXTERNAL_STORAGE nur dann an, wenn Ihre App die datenschutzfreundlicheren APIs wie das Storage Access Framework oder die Media Store API nicht effektiv nutzen kann. Die Nutzung der Berechtigung durch deine App muss den zulässigen Verwendungszwecken entsprechen und direkt mit der Hauptfunktion der App verknüpft sein. Wenn deine App einen ähnlichen Anwendungsfall wie den folgenden hat, kann sie wahrscheinlich die Berechtigung MANAGE_EXTERNAL_STORAGE anfordern:

  • Dateiverwaltung
  • Apps zum Sichern und Wiederherstellen
  • Antiviren-Apps
  • Apps zur Dokumentverwaltung
  • Dateisuche auf dem Gerät
  • Laufwerk- und Dateiverschlüsselung
  • Datenmigration von Gerät zu Gerät