Mit Android 11 (API-Level 30) wird die Plattform weiter optimiert, da App- und Nutzerdaten im externen Speicher besser geschützt werden. Dieser Release enthält verschiedene Verbesserungen, z. B. den Zugriff auf Rohdateipfade, Batch-Bearbeitungsvorgänge für Medien und eine aktualisierte Benutzeroberfläche für das Storage Access Framework.
Der Release bietet außerdem Verbesserungen am begrenzten Speicher, die Entwicklern die Ausführung ihrer Speicheranwendungsfälle nach der Migration zu diesem Speichermodell erleichtern.
Erzwingung von begrenztem Speicher
Apps, die unter Android 11 ausgeführt werden, aber auf Android 10 (API-Level 29) ausgerichtet sind, können weiterhin das Attribut requestLegacyExternalStorage
anfordern. Mit diesem Flag können Anwendungen die Änderungen im Zusammenhang mit dem begrenzten Speicher vorübergehend deaktivieren, z. B. Zugriff auf verschiedene Verzeichnisse und verschiedene Arten von Mediendateien gewähren. Nachdem Sie Ihre App auf Android 11 aktualisiert haben, ignoriert das System das Flag requestLegacyExternalStorage
.
Kompatibilität mit Android 10 aufrechterhalten
Wenn Ihre App den begrenzten Speicher auf Android 10-Geräten deaktiviert, empfehlen wir, requestLegacyExternalStorage
in der Manifestdatei der App auf true
zu setzen. Auf diese Weise funktioniert deine App auf Geräten mit Android 10 weiterhin wie erwartet.
Daten in Verzeichnisse migrieren, die bei Verwendung von begrenztem Speicher sichtbar sind
Wenn Ihre Anwendung das alte Speichermodell verwendet und zuvor auf Android 10 oder niedriger ausgerichtet ist, speichern Sie möglicherweise Daten in einem Verzeichnis, auf das Ihre App nicht zugreifen kann, wenn das Modell für begrenzten Speicher aktiviert ist. Bevor Sie ein Targeting auf Android 11 vornehmen, migrieren Sie Daten in ein Verzeichnis, das mit dem begrenzten Speicher kompatibel ist.
Speicher in begrenztem Umfang testen
Aktivieren Sie die folgenden App-Kompatibilitäts-Flags, um den begrenzten Speicher in Ihrer App unabhängig von der SDK-Zielversion und den Manifest-Flag-Werten zu aktivieren:
DEFAULT_SCOPED_STORAGE
(standardmäßig für alle Apps aktiviert)FORCE_ENABLE_SCOPED_STORAGE
(standardmäßig für alle Apps deaktiviert)
Wenn Sie den begrenzten Speicher deaktivieren und stattdessen das Legacy-Speichermodell verwenden möchten, heben Sie beide Flags auf.
Speicherplatz auf Gerät verwalten
Ab Android 11 können Apps, die das Modell mit begrenztem Speicher verwenden, nur noch auf ihre eigenen app-spezifischen Cache-Dateien zugreifen. Wenn Ihre App den Gerätespeicher verwalten muss, folgen Sie der Anleitung zur Abfrage von freiem Speicherplatz.
- Prüfen Sie, ob freier Speicherplatz verfügbar ist. Rufen Sie dazu die Intent-Aktion
ACTION_MANAGE_STORAGE
auf. Wenn auf dem Gerät nicht genügend freier Speicherplatz vorhanden ist, bitte den Nutzer, deiner App zuzustimmen, dass alle Caches geleert werden. Rufen Sie dazu die Intent-Aktion
ACTION_CLEAR_APP_CACHE
auf.
App-spezifisches Verzeichnis auf externem Speicher
Ab Android 11 können Apps kein eigenes app-spezifisches Verzeichnis auf externem Speicher erstellen. Rufen Sie getExternalFilesDirs()
auf, um auf das Verzeichnis zuzugreifen, das das System für Ihre Anwendung bereitstellt.
Zugriff auf Mediendateien
Android 11 fügt die folgenden Funktionen hinzu, um den Zugriff auf Medien zu erleichtern und gleichzeitig die Privatsphäre der Nutzer zu schützen.
Batchvorgänge ausführen
Für die Konsistenz auf verschiedenen Geräten und für mehr Nutzerkomfort wurden in Android 11 mehrere Methoden hinzugefügt, die die Verwaltung von Gruppen von Mediendateien vereinfachen.
Über direkte Dateipfade und native Bibliotheken auf Dateien zugreifen
Damit Ihre App besser mit Mediatheken von Drittanbietern funktioniert, können Sie in Android 11 andere APIs als die MediaStore
API verwenden, um über direkte Dateipfade auf Mediendateien aus freigegebenem Speicher zuzugreifen. Zu diesen APIs gehören:
- Die
File
API. - Native Bibliotheken wie
fopen()
.
Zugriff auf Daten aus anderen Apps
Zum Schutz der Nutzerdaten schränkt das System auf Geräten mit Android 11 oder höher den Zugriff deiner App auf die privaten Verzeichnisse anderer Apps weiter ein.
Zugriff auf Datenverzeichnisse im internen Speicher
Unter Android 9 (API-Level 28) wurde nun eingeschränkt, welche Anwendungen die Dateien in ihren Datenverzeichnissen im internen Speicher für andere Anwendungen weltweit zugänglich machen konnten. Apps, die auf Android 9 oder höher ausgerichtet sind, können die Dateien in ihren Datenverzeichnissen nicht weltweit zugänglich machen.
Android 11 erweitert diese Einschränkung. Wenn Ihre App auf Android 11 ausgerichtet ist, kann sie nicht auf die Dateien im Datenverzeichnis einer anderen App zugreifen, selbst wenn die andere App auf Android 8.1 (API-Level 27) oder niedriger ausgerichtet ist und die Dateien in ihrem Datenverzeichnis allgemein lesbar gemacht hat.
Zugriff auf anwendungsspezifische Verzeichnisse im externen Speicher
Unter Android 11 können Apps nicht mehr auf Dateien im speziellen App-spezifischen Verzeichnis irgendeiner anderen Apps innerhalb des externen Speichers zugreifen.
Zugriffsbeschränkungen für Dokumente
Damit Entwickler Zeit zum Testen haben, treten die folgenden Änderungen im Zusammenhang mit dem Storage Access Framework (SAF) nur dann in Kraft, wenn Ihre App auf Android 11 oder höher ausgerichtet ist.
Zugriff auf Verzeichnisse
Sie können mit der Intent-Aktion ACTION_OPEN_DOCUMENT_TREE
keinen Zugriff mehr auf die folgenden Verzeichnisse anfordern:
- Das Stammverzeichnis des internen Speicher-Volumes.
- Das Stammverzeichnis jedes SD-Karten-Volumes, das der Gerätehersteller als zuverlässig erachtet, unabhängig davon, ob die Karte emuliert oder entfernt werden kann. Ein zuverlässiges Volume ist ein Volume, auf das eine App die meiste Zeit erfolgreich zugreifen kann.
- Das Verzeichnis
Download
.
Zugriff auf Dateien
Sie können die Intent-Aktion ACTION_OPEN_DOCUMENT_TREE
oder ACTION_OPEN_DOCUMENT
nicht mehr verwenden, um den Nutzer aufzufordern, einzelne Dateien aus den folgenden Verzeichnissen auszuwählen:
- Das Verzeichnis
Android/data/
und alle Unterverzeichnisse. - Das Verzeichnis
Android/obb/
und alle Unterverzeichnisse.
Änderung testen
So testen Sie diese Verhaltensänderung:
- Rufen Sie mit der Aktion
ACTION_OPEN_DOCUMENT
einen Intent auf. Die VerzeichnisseAndroid/data/
undAndroid/obb/
dürfen nicht angezeigt werden. - Sie haben folgende Möglichkeiten:
- Aktivieren Sie das Kompatibilitäts-Flag
RESTRICT_STORAGE_ACCESS_FRAMEWORK
. - Die App muss auf Android 11 oder höher ausgerichtet sein.
- Aktivieren Sie das Kompatibilitäts-Flag
- Rufen Sie mit der Aktion
ACTION_OPEN_DOCUMENT_TREE
einen Intent auf. Prüfen Sie, ob das VerzeichnisDownload
angezeigt und die mit dem Verzeichnis verknüpfte Aktionsschaltfläche ausgegraut ist.
Berechtigungen
Mit Android 11 werden die folgenden Änderungen in Bezug auf Speicherberechtigungen eingeführt.
Auf beliebige Version ausrichten
Die folgenden Änderungen treten in Android 11 unabhängig von der SDK-Zielversion Ihrer App in Kraft:
- Die Laufzeitberechtigung Speicher wurde in Dateien und Medien umbenannt.
Wenn Ihre App den eingeschränkten Speicher nicht deaktiviert hat und die Berechtigung
READ_EXTERNAL_STORAGE
anfordert, sehen Nutzer ein anderes Dialogfeld als unter Android 10. Im Dialogfeld wird angezeigt, dass deine App Zugriff auf Fotos und Medien anfordert (siehe Abbildung 1).In den Systemeinstellungen können Nutzer sehen, welche Apps die Berechtigung
READ_EXTERNAL_STORAGE
haben. Auf der Seite Einstellungen > Datenschutz > Berechtigungsmanager > Dateien und Medien wird jede App mit dieser Berechtigung unter Für alle Dateien zugelassen aufgeführt. Wenn deine App auf Android 11 ausgerichtet ist, solltest du bedenken, dass dieser Zugriff auf „alle Dateien“ schreibgeschützt ist. Wenn Sie mit dieser Anwendung alle Dateien im freigegebenen Speicher lesen und schreiben möchten, benötigen Sie die Berechtigung Zugriff auf alle Dateien.
Auf Android 11 ausrichten
Wenn deine App auf Android 11 ausgerichtet ist, gewähren sowohl die Berechtigung WRITE_EXTERNAL_STORAGE
als auch die privilegierte Berechtigung WRITE_MEDIA_STORAGE
keinen zusätzlichen Zugriff mehr.
Auf Geräten mit Android 10 (API-Level 29) oder höher kann deine App zu klar definierten Mediensammlungen wie MediaStore.Downloads
beitragen, ohne dass speicherbezogene Berechtigungen angefordert werden. Weitere Informationen dazu, wie Sie bei der Arbeit mit Mediendateien in Ihrer Anwendung nur die erforderlichen Berechtigungen anfordern
Zugriff auf alle Dateien
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, dies jedoch nicht mithilfe der Best Practices für datenschutzfreundliche Speicherung effizient bewältigen kann. Android bietet für diese Situationen eine spezielle App namens Zugriff auf alle Dateien. Weitere Informationen finden Sie in der Anleitung zum Verwalten aller Dateien auf einem Speichergerät.
Zusätzliche Ressourcen
Weitere Informationen zu Änderungen beim Speicherplatz in Android 11 finden Sie hier: