Alle Dateien auf einem Speichergerät verwalten

Die meisten Apps, die Zugriff auf den freigegebenen Speicher benötigen, können die Best Practices für die Freigabe von Mediendateien und die Freigabe von Nicht-Mediendateien befolgen. Einige Apps haben jedoch einen Hauptanwendungsfall, der einen umfassenden Zugriff auf Dateien auf einem Gerät erfordert, auf die sie jedoch nicht effizient über die datenschutzfreundlichen Best Practices für den Speicher zugreifen können. Android bietet für diese Situationen einen speziellen App-Zugriff, den Zugriff auf alle Dateien.

Beispielsweise kann der primäre Anwendungsfall einer Antiviren-App das regelmäßige Scannen vieler Dateien in verschiedenen Verzeichnissen erfordern. Wenn für diesen Scan wiederholte Nutzerinteraktionen erforderlich sind, um Verzeichnisse über die Dateiauswahl des Systems auszuwählen, ist das nicht nutzerfreundlich. Andere Anwendungsfälle wie Dateimanager-Apps, Apps zum Sichern und Wiederherstellen sowie Verwaltungs-Apps für Dokumente erfordern ähnliche Überlegungen.

Zugriff auf alle Dateien anfordern

Eine App kann den Zugriff auf alle Dateien vom Nutzer anfordern, indem sie Folgendes tut:

  1. Deklariere die Berechtigung MANAGE_EXTERNAL_STORAGE im Manifest.
  2. Verwende die Intent-Aktion ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION, um Nutzer auf eine Seite mit Systemeinstellungen weiterzuleiten, auf der sie die folgende Option für deine App aktivieren können: Zugriff zum Verwalten aller Dateien zulassen.

Wenn du feststellen möchtest, ob deiner App die Berechtigung MANAGE_EXTERNAL_STORAGE gewährt wurde, rufe Environment.isExternalStorageManager() auf.

Durch 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 des USB-OTG-Laufwerks 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 den Zugriff über den direkten Dateipfad.

    Apps, denen diese Berechtigung gewährt wurde, können weiterhin nicht auf die appspezifischen Verzeichnisse anderer Apps zugreifen, da diese Verzeichnisse als Unterverzeichnisse von Android/data/ auf einem Speicher-Volume 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 jedoch das Storage Access Framework verwenden, können Sie nur dann auf eine Datei oder ein Verzeichnis zugreifen, wenn Sie dies ohne die Berechtigung MANAGE_EXTERNAL_STORAGE tun können.

Aktivität zur Speicherverwaltung einer anderen App aufrufen

Ab Android 12 (API-Level 31) können Apps, die sowohl die Berechtigung MANAGE_EXTERNAL_STORAGE als auch die Berechtigung QUERY_ALL_PACKAGES haben, z. B. Dateimanager-Apps, die getManageSpaceActivityIntent() verwenden, um Nutzer zur benutzerdefinierten Aktivität zur Speicherplatzverwaltung einer anderen App weiterzuleiten.

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

  • Ein PendingIntent, wenn die App mit dem angegebenen Paketnamen eine benutzerdefinierte Aktivität „Speicherplatz verwalten“ definiert hat. Die Dateimanager-App, 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 „Speicherplatz 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 zu Testzwecken aktivieren. Führen Sie dazu den folgenden Befehl auf dem Computer aus, der mit Ihrem Testgerät verbunden ist:

adb shell appops set --uid PACKAGE_NAME MANAGE_EXTERNAL_STORAGE allow

Google Play-Benachrichtigung

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

Um den allgemeinen Zugriff auf den freigegebenen Speicher einzuschränken, hat der Google Play Store seine Richtlinie aktualisiert, um Apps zu prüfen, die auf Android 11 (API-Level 30) oder höher ausgerichtet sind und über die Berechtigung MANAGE_EXTERNAL_STORAGE Zugriff auf alle Dateien anfordern. Diese Richtlinie ist seit Mai 2021 in Kraft.

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 angezeigt, die in Abbildung 1 zu sehen ist. 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-Richtlinie zur Berechtigung MANAGE_EXTERNAL_STORAGE erinnert.

Fordere die Berechtigung MANAGE_EXTERNAL_STORAGE nur an, wenn deine App die datenschutzfreundlicheren APIs wie das Storage Access Framework oder die Media Store API nicht effektiv nutzen kann. 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 hat, der einem der folgenden ähnelt, kann sie wahrscheinlich die Berechtigung MANAGE_EXTERNAL_STORAGE anfordern:

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