Android 11 (API-Level 30) verbessert die Plattform weiter und bietet einen besseren Schutz für App- und Nutzerdaten im externen Speicher. Diese Version enthält mehrere Verbesserungen, z. B. Zugriff auf den Pfad der Rohdatei, Batch-Bearbeitungsfunktionen für Medien und eine aktualisierte Benutzeroberfläche für das Storage Access Framework.
Außerdem wurden Verbesserungen am speicherbasierten Zugriff vorgenommen. So können Entwickler ihre Speichernutzungsfälle leichter erfüllen, nachdem sie zu diesem Speichermodell migriert sind.
Durchsetzung der Speicherbeschränkung
Apps, die unter Android 11 ausgeführt werden, aber auf Android 10 (API-Level 29) ausgerichtet sind, können das Attribut requestLegacyExternalStorage
weiterhin anfordern. Mit diesem Flag können Apps die mit dem Speicher mit begrenztem Zugriff verbundenen Änderungen vorübergehend deaktivieren, z. B. den Zugriff auf verschiedene Verzeichnisse und verschiedene Arten von Mediendateien gewähren. Nachdem Sie Ihre App auf Android 11 ausgerichtet haben, ignoriert das System das requestLegacyExternalStorage
-Flag.
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 App das bisherige Speichermodell verwendet und zuvor auf Android 10 oder niedriger ausgerichtet war, speichern Sie möglicherweise Daten in einem Verzeichnis, auf das Ihre App nicht zugreifen kann, wenn das Modell Speicher mit Berechtigungsumfang aktiviert ist. Bevor Sie Ihr Targeting auf Android 11 ausrichten, migrieren Sie Daten in ein Verzeichnis, das mit dem befristeten Speicher kompatibel ist.
Speicher mit begrenztem Umfang testen
Wenn Sie den Speicher mit begrenztem Zugriff in Ihrer App aktivieren möchten, müssen Sie unabhängig von der Ziel-SDK-Version und den Manifest-Flag-Werten Ihrer App die folgenden App-Kompatibilitäts-Flags 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 Speichermodell mit Begrenzung verwenden, nur noch auf ihre eigenen app-spezifischen Cachedateien zugreifen. Wenn Ihre App den Gerätespeicher verwalten muss, folgen Sie der Anleitung zum Abfragen des freien Speicherplatzes.
- Prüfen Sie, ob freier Speicherplatz vorhanden ist, indem Sie die Intent-Aktion
ACTION_MANAGE_STORAGE
aufrufen. Wenn auf dem Gerät nicht genügend freier Speicherplatz vorhanden ist, bitte den Nutzer, Ihrer App die Berechtigung zum Löschen aller Caches zu erteilen. Rufen Sie dazu die Intent-Aktion
ACTION_CLEAR_APP_CACHE
auf.
App-spezifisches Verzeichnis im externen Speicher
Ab Android 11 können Apps kein eigenes app-spezifisches Verzeichnis im externen Speicher mehr erstellen. Rufen Sie getExternalFilesDirs()
auf, um auf das Verzeichnis zuzugreifen, das das System für Ihre App 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 Nutzerfreundlichkeit wurden in Android 11 mehrere Methoden hinzugefügt, die die Verwaltung von Gruppen von Mediendateien erleichtern.
Über direkte Dateipfade und native Bibliotheken auf Dateien zugreifen
Damit Ihre App reibungsloser mit Medienbibliotheken von Drittanbietern funktioniert, können Sie unter Android 11 andere APIs als die MediaStore
API verwenden, um über direkte Dateipfade auf Mediendateien im freigegebenen Speicher zuzugreifen. Dazu gehören:
- Die
File
API - Native Bibliotheken wie
fopen()
.
Zugriff auf Daten aus anderen Apps
Zum Schutz der Privatsphäre der Nutzer schränkt das System auf Geräten mit Android 11 oder höher den Zugriff Ihrer App auf die privaten Verzeichnisse anderer Apps weiter ein.
Zugriff auf Datenverzeichnisse im internen Speicher
Mit Android 9 (API-Level 28) wurde eingeschränkt, welche Apps die Dateien in ihren Dateiverzeichnissen im internen Speicher für andere Apps freigeben können. 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 app-spezifische Verzeichnisse im externen Speicher
Unter Android 11 können Apps nicht mehr auf Dateien im speziellen, app-spezifischen Verzeichnis einer anderen App im externen Speicher zugreifen.
Einschränkungen für den Dokumentzugriff
Damit Entwickler Zeit für Tests haben, treten die folgenden Änderungen im Zusammenhang mit dem Storage Access Framework (SAF) nur in Kraft, wenn Ihre App auf Android 11 oder höher ausgerichtet ist.
Zugriff auf Verzeichnisse
Sie können die Intent-Aktion ACTION_OPEN_DOCUMENT_TREE
nicht mehr verwenden, um Zugriff auf die folgenden Verzeichnisse anzufordern:
- Das Stammverzeichnis des internen Speichervolumes.
- Das Stammverzeichnis jedes SD-Kartenvolumes, das vom Gerätehersteller als zuverlässig eingestuft wird, unabhängig davon, ob die Karte emuliert oder herausnehmbar ist. 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. Prüfen Sie, ob die VerzeichnisseAndroid/data/
undAndroid/obb/
nicht angezeigt werden. - Führen Sie einen der folgenden Schritte aus:
- Aktivieren Sie das Flag für die App-Kompatibilität
RESTRICT_STORAGE_ACCESS_FRAMEWORK
. - Die App muss auf Android 11 oder höher ausgerichtet sein.
- Aktivieren Sie das Flag für die App-Kompatibilität
- Rufen Sie einen Intent mit der Aktion
ACTION_OPEN_DOCUMENT_TREE
auf. Prüfen Sie, ob das VerzeichnisDownload
angezeigt wird und die zugehörige Aktionsschaltfläche ausgegraut ist.
Berechtigungen
Android 11 führt die folgenden Änderungen an Speicherberechtigungen ein.
Auf alle Versionen ausrichten
Die folgenden Änderungen treten unter Android 11 in Kraft, unabhängig von der Ziel-SDK-Version Ihrer App:
- Die Laufzeitberechtigung Speicher wird in Dateien und Medien umbenannt.
Wenn Ihre App den begrenzten Speicher nicht deaktiviert hat und die Berechtigung
READ_EXTERNAL_STORAGE
anfordert, wird Nutzern ein anderes Dialogfeld als unter Android 10 angezeigt. 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 werden alle Apps, die diese Berechtigung haben, unter Für alle Dateien erlaubt 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 App alle Dateien im freigegebenen Speicher lesen und schreiben möchten, benötigen Sie die Berechtigung Zugriff auf alle Dateien.
Auf Android 11 ausrichten
Wenn Ihre App auf Android 11 ausgerichtet ist, gewähren weder die Berechtigung WRITE_EXTERNAL_STORAGE
noch die Berechtigung WRITE_MEDIA_STORAGE
mit erhöhten Berechtigungen zusätzlichen Zugriff.
Auf Geräten mit Android 10 (API-Level 29) oder höher kann Ihre App zu klar definierten Mediensammlungen wie MediaStore.Downloads
beitragen, ohne dass Speicherberechtigungen angefordert werden. Weitere Informationen zum Anfordern nur der erforderlichen Berechtigungen
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 erfordern jedoch für die Hauptfunktion einen umfassenden Zugriff auf Dateien auf einem Gerät, was mit den datenschutzfreundlichen Best Practices für den Speicherplatz nicht effizient möglich ist. Android bietet für diese Situationen einen speziellen App-Zugriff namens Zugriff auf alle Dateien. Weitere Informationen finden Sie in der Anleitung zum Verwalten aller Dateien auf einem Speichergerät.
Weitere Informationen
Weitere Informationen zu den Änderungen am Speicher in Android 11 finden Sie in den folgenden Dokumenten: