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:
- Deklariere im Manifest die Berechtigung
MANAGE_EXTERNAL_STORAGE
. - 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 MethodegetManageSpaceActivityIntent()
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.
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