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