Alle Dateien auf einem Speichergerät verwalten

Für die meisten Apps, die Zugriff auf freigegebenen Speicher benötigen, gelten die Best Practices für die Freigabe von Mediendateien und die Freigabe von Nicht-Mediendateien. Einige Apps haben jedoch einen Hauptanwendungsfall, 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, der als Zugriff auf alle Dateien bezeichnet wird.

Der primäre Anwendungsfall einer Antivirenanwendung kann beispielsweise das regelmäßige Scannen vieler Dateien in verschiedenen Verzeichnissen erfordern. Wenn für dieses Scannen wiederholte Nutzerinteraktionen erforderlich sind, um Verzeichnisse über die Systemdateiauswahl auszuwählen, wird die Nutzerfreundlichkeit beeinträchtigt. Andere Anwendungsfälle wie Dateimanager-, Sicherungs- und Wiederherstellungsanwendungen sowie Anwendungen zur Dokumentverwaltung erfordern ähnliche Überlegungen.

Zugriff auf alle Dateien anfordern

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

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

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

Von MANAGE_EXTERNAL_STORAGE gestattete 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 USB-OTG-Laufwerks und der SD-Karte

  • Schreibzugriff auf alle internen Speicherverzeichnisse außer /Android/data/, /sdcard/Android und den meisten Unterverzeichnissen von /sdcard/Android. Dieser Schreibzugriff umfasst den direkten Dateipfad-Zugriff.

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

Wenn eine App die Berechtigung MANAGE_EXTERNAL_STORAGE hat, kann sie ü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 dies 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, getManageSpaceActivityIntent() verwenden, um Nutzer zu den benutzerdefinierten Aktivitäten zur Speicherplatzverwaltung einer anderen App weiterzuleiten.

Die Methode getManageSpaceActivityIntent() akzeptiert einen Paketnamen und einen Anfragecode und gibt eines der folgenden Ereignisse zurück:

  • Ein PendingIntent, wenn die App mit dem angegebenen Paketnamen eine benutzerdefinierte Aktivität vom Typ „Bereich verwalten“ definiert hat. 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 Anwendung mit dem angegebenen Paketnamen keine „Verwaltungsbereich“-Aktivität definiert.

MANAGE_EXTERNAL_STORAGE zum Testen aktivieren

Wenn Sie herausfinden möchten, wie sich die Berechtigung MANAGE_EXTERNAL_STORAGE auf Ihre App auswirkt, können Sie die Berechtigung für Tests 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 einen Hinweis für Entwickler, die Apps bei Google Play veröffentlichen.

Um den umfassenden Zugriff auf gemeinsamen Speicher zu begrenzen, hat der Google Play Store seine Richtlinie aktualisiert, um Apps zu bewerten, die auf Android 11 (API-Level 30) oder höher ausgerichtet sind und den Zugriff auf alle Dateien über die Berechtigung MANAGE_EXTERNAL_STORAGE anfordern. Diese Richtlinie gilt seit Mai 2021.

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

Abbildung 1. Lint-Warnung in Android Studio, die Entwickler an die Google Play-Richtlinie bezüglich der Berechtigung MANAGE_EXTERNAL_STORAGE erinnert.

Fordern Sie die Berechtigung MANAGE_EXTERNAL_STORAGE nur an, wenn Ihre App die datenschutzfreundlicheren APIs wie das Storage Access Framework oder die Media Store API nicht effektiv nutzen kann. Die Verwendung der Berechtigung durch Ihre App muss unter die zulässigen Verwendungszwecke fallen und direkt mit der Hauptfunktion der App verbunden sein. Wenn Ihre App einen Anwendungsfall hat, der einem der folgenden ähnelt, kann die Berechtigung MANAGE_EXTERNAL_STORAGE wahrscheinlich angefordert werden:

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