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 Hauptnutzungsfall, der einen umfassenden Zugriff auf Dateien auf einem Gerät erfordert, aber nicht effizient mit den datenschutzfreundlichen Best Practices für den Speicher erfolgen kann. Android bietet für diese Situationen einen speziellen App-Zugriff namens Zugriff auf alle Dateien.

Der Hauptanwendungsfall einer Antiviren-App erfordert beispielsweise das regelmäßige Scannen vieler Dateien in verschiedenen Verzeichnissen. Wenn für dieses Scannen wiederholte Nutzerinteraktionen erforderlich sind, um Verzeichnisse über die Systemdateiauswahl auszuwählen, ist das für Nutzer nicht sehr praktisch. Andere Anwendungsfälle – z. B. Dateimanager-Apps, Sicherungs- und Wiederherstellungsanwendungen und Anwendungen zur Dokumentverwaltung – erfordern ähnliche Überlegungen.

Zugriff auf alle Dateien anfordern

Eine App kann vom Nutzer Zugriff auf alle Dateien anfordern. Gehen Sie dazu so vor:

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

Wenn Sie wissen möchten, ob Ihrer App die Berechtigung MANAGE_EXTERNAL_STORAGE erteilt wurde, rufen Sie Environment.isExternalStorageManager() auf.

Von MANAGE_EXTERNAL_STORAGE zulässige 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 sowohl des USB On-The-Go-Speichers (OTG) als auch 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 den Zugriff auf den direkten Dateipfad.

    Apps, denen diese Berechtigung gewährt wird, können weiterhin nicht auf die appspezifischen Verzeichnisse zugreifen, die zu anderen Apps gehören, da diese Verzeichnisse auf einem Speichervolume als Unterverzeichnisse von Android/data/ angezeigt werden.

Wenn eine App die Berechtigung MANAGE_EXTERNAL_STORAGE hat, kann sie über die MediaStore API oder 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 dies auch ohne die Berechtigung MANAGE_EXTERNAL_STORAGE möglich ist.

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. Dateiverwaltungs-Apps, Nutzer über getManageSpaceActivityIntent() zur Aktivität zur benutzerdefinierten Speicherverwaltung einer anderen App weiterleiten.

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

  • „A“ PendingIntent, wenn für die App mit dem angegebenen Paketnamen eine benutzerdefinierte Aktivität vom Typ „Bereich verwalten“ definiert wurde. Die Dateiverwaltungs-App, die die getManageSpaceActivityIntent()-Methode 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 vom Typ „Gruppenbereich verwalten“ 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 sie zum Testen 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 eine Mitteilung für Entwickler, die Apps bei Google Play veröffentlichen.

Um den uneingeschränkten Zugriff auf freigegebenen Speicher zu beschränken, hat der Google Play Store seine Richtlinien aktualisiert. Apps, die auf Android 11 (API-Level 30) oder höher ausgerichtet sind und über die Berechtigung MANAGE_EXTERNAL_STORAGE den Zugriff auf alle Dateien anfordern, werden nun genauer geprüft. Diese Richtlinie gilt seit Mai 2021.

Wenn Ihre App auf Android 11 oder höher ausgerichtet ist und die Berechtigung MANAGE_EXTERNAL_STORAGE deklariert, zeigt Android Studio die in Abbildung 1 dargestellte Lint-Warnung an. Diese Warnung erinnert Sie daran, dass im Google Play Store eine Richtlinie gilt, die die Verwendung der Berechtigung einschränkt.

Abbildung 1. Lint-Warnung in Android Studio, die Entwickler an die Google Play-Richtlinien für die Berechtigung MANAGE_EXTERNAL_STORAGE erinnert.

Fordern Sie die Berechtigung MANAGE_EXTERNAL_STORAGE nur an, wenn sich bei Ihrer App die datenschutzfreundlicheren APIs wie das Storage Access Framework oder die Media Store API nicht umsetzen lassen. Die Nutzung der Berechtigung durch Ihre App muss einem der zulässigen Verwendungszwecke entsprechen und direkt für die Hauptfunktion der App erforderlich sein. Wenn Ihre App einen Anwendungsfall enthält, der einem der folgenden ähnelt, kann sie wahrscheinlich die Berechtigung MANAGE_EXTERNAL_STORAGE anfordern:

  • Dateiverwaltung
  • Apps zum Sichern und Wiederherstellen
  • Antiviren-Apps
  • Apps zur Dokumentverwaltung
  • On-Device-Dateisuche
  • Laufwerks- und Dateiverschlüsselung
  • Datenmigration von Gerät zu Gerät