Bei den meisten Apps, für die der Zugriff auf freigegebenen Speicher erforderlich ist, können die Best Practices für die Freigabe von Mediendateien und die Freigabe von nicht medialen Dateien befolgt werden. 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. Bei anderen Anwendungsfällen wie Dateimanager-Apps, Sicherungs- und Wiederherstellungs-Apps sowie Apps zur Dokumentverwaltung müssen ähnliche Überlegungen angestellt werden.
Zugriff auf alle Dateien anfordern
Eine App kann vom Nutzer Zugriff auf alle Dateien anfordern. Gehen Sie dazu so vor:
- Deklarieren Sie die Berechtigung
MANAGE_EXTERNAL_STORAGE
im Manifest. - 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 MANAGE_EXTERNAL_STORAGE
-Berechtigung 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 jedoch das Storage Access Framework verwenden, können Sie 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 diegetManageSpaceActivityIntent()
-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 Ihrem 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.
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