Die meisten Apps, die Zugriff auf freigegebenen Speicher benötigen, können die Best Practices für das Freigeben von Mediendateien und das Freigeben von Nicht-Mediendateien befolgen. Einige Apps haben jedoch eine Hauptfunktion, die umfassenden Zugriff auf Dateien auf einem Gerät erfordert, aber nicht effizient über die datenschutzfreundlichen Best Practices für den Speicherzugriff erfolgen kann. Android bietet für diese Situationen einen speziellen App-Zugriff mit der Bezeichnung Zugriff auf alle Dateien.
Beispielsweise kann es sein, dass eine Antiviren-App regelmäßig viele Dateien in verschiedenen Verzeichnissen scannen muss. Wenn für diesen Scan wiederholte Nutzerinteraktionen erforderlich sind, um Verzeichnisse über die Systemdateiauswahl auszuwählen, ist die Nutzerfreundlichkeit schlecht. Für andere Anwendungsfälle wie Dateimanager-Apps, Apps zum Sichern und Wiederherstellen sowie Apps zur Dokumentverwaltung gelten ähnliche Überlegungen.
Zugriff auf alle Dateien anfordern
Eine App kann den Zugriff auf alle Dateien vom Nutzer anfordern, indem sie Folgendes tut:
- Deklarieren Sie die Berechtigung
MANAGE_EXTERNAL_STORAGE
im Manifest. - Verwende 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 deine App aktivieren können: Zugriff zum Verwalten aller Dateien zulassen.
Rufen Sie Environment.isExternalStorageManager()
auf, um festzustellen, ob Ihrer App die Berechtigung MANAGE_EXTERNAL_STORAGE
erteilt wurde.
Vorgänge, die durch MANAGE_EXTERNAL_STORAGE zulässig sind
Die Berechtigung MANAGE_EXTERNAL_STORAGE
gewährt Folgendes:
Lese- und Schreibzugriff auf alle Dateien im gemeinsamen Speicher.
Zugriff auf die Inhalte 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 erteilt wurde, können weiterhin nicht auf die app-spezifischen Verzeichnisse anderer Apps zugreifen, da diese Verzeichnisse als Unterverzeichnisse von
Android/data/
auf einem Speichermedium 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 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. Dateimanager-Apps, den Intent getManageSpaceActivityIntent()
verwenden, um Nutzer zur Aktivität zur benutzerdefinierten Speicherverwaltung einer anderen App weiterzuleiten.
Die Methode getManageSpaceActivityIntent()
akzeptiert einen Paketnamen und einen Anfragecode und gibt einen der folgenden Werte zurück:
- Eine
PendingIntent
, wenn für die App mit dem angegebenen Paketnamen eine benutzerdefinierte Aktivität zum Verwalten des Speichers 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 für die App mit dem angegebenen Paketnamen keine „manage space“-Aktivität definiert ist.
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 für Tests 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 einen Hinweis für Entwickler, die Apps bei Google Play veröffentlichen.
Um den umfassenden Zugriff auf den freigegebenen Speicher zu beschränken, 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 über die Berechtigung MANAGE_EXTERNAL_STORAGE
Zugriff auf alle Dateien 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 angezeigt, die in Abbildung 1 zu sehen ist. Diese Warnung soll Sie daran erinnern, dass die Verwendung der Berechtigung durch eine Richtlinie des Google Play Store eingeschränkt wird.
MANAGE_EXTERNAL_STORAGE
erinnert.
Fordern Sie die Berechtigung MANAGE_EXTERNAL_STORAGE
nur dann 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 der folgenden Anwendungsfälle umfasst, 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