Mit Android 11 (API-Level 30) wird die Plattform weiter optimiert, sodass App- und Nutzerdaten auf externen Speichermedien besser geschützt sind. Dieser Release enthält mehrere Verbesserungen, z. B. Zugriff auf Rohdateien für den Pfad, Batch-Bearbeitungsvorgänge für Medien und eine aktualisierte Benutzeroberfläche für das Storage Access Framework.
Die Version umfasst auch Verbesserungen beim bezogenen Speicher, die es für Entwickler einfacher machen, ihre Speicheranwendungsfälle nach der Migration zu diesem Speichermodell zu erfüllen.
Erzwingung für begrenzten Speicher
Apps, die unter Android 11 ausgeführt werden, aber auf Android 10 (API-Level 29) ausgerichtet sind, können das Attribut requestLegacyExternalStorage
trotzdem anfordern. Mit diesem Flag können Apps die Änderungen im Zusammenhang mit dem Bereichsspeicher vorübergehend deaktivieren, z. B. um Zugriff auf verschiedene Verzeichnisse und verschiedene Arten von Mediendateien zu gewähren. Nachdem du deine App auf Android 11 ausgerichtet hast, ignoriert das System das Flag requestLegacyExternalStorage
.
Kompatibilität mit Android 10 aufrechterhalten
Wenn für Ihre App bei der Ausführung auf Android 10-Geräten der beschränkte Speicher deaktiviert wird, empfehlen wir, requestLegacyExternalStorage
in der Manifestdatei Ihrer App weiterhin auf true
zu setzen. So 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 war, speichern Sie möglicherweise Daten in einem Verzeichnis, auf das die Anwendung nicht zugreifen kann, wenn das Modell für begrenzten Speicher aktiviert ist. Bevor Sie Ihre App auf Android 11 ausrichten, migrieren Sie Daten in ein Verzeichnis, das mit begrenztem Speicher kompatibel ist.
Test zugewiesener Speicher
Wenn Sie unabhängig von den Werten der SDK-Zielversion und des Manifest-Flags Ihrer App den begrenzten Speicher in Ihrer App aktivieren möchten, aktivieren Sie die folgenden Flags zur App-Kompatibilität:
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 alte Speichermodell verwenden möchten, heben Sie beide Flags auf.
Speicherplatz auf Gerät verwalten
Ab Android 11 können Apps, die das Modell für beschränkten Speicher verwenden, nur auf ihre eigenen app-spezifischen Cache-Dateien zugreifen. Wenn Ihre App Gerätespeicher verwalten muss, folgen Sie der Anleitung zum Abfragen von freiem Speicherplatz.
- Prüfen Sie, ob freier Speicherplatz verfügbar 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, der App zuzustimmen, dass alle Caches geleert werden. Rufen Sie dazu die Intent-Aktion
ACTION_CLEAR_APP_CACHE
auf.
Anwendungsspezifisches Verzeichnis auf externem Speicher
Ab Android 11 können Apps kein eigenes anwendungsspezifisches Verzeichnis auf externem Speicher erstellen. Rufen Sie getExternalFilesDirs()
auf, um auf das Verzeichnis zuzugreifen, das das System für Ihre App bereitstellt.
Zugriff auf Mediendateien
Android 11 bietet die folgenden Funktionen, um den Zugriff auf Medien zu erleichtern und gleichzeitig die Privatsphäre der Nutzer zu schützen.
Batchvorgänge ausführen
Für Konsistenz auf Geräten und für mehr Komfort 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 reibungslos mit Mediatheken von Drittanbietern funktioniert, können Sie in Android 11 neben der MediaStore
API andere APIs verwenden, um über direkte Dateipfade auf Mediendateien aus freigegebenem Speicher zuzugreifen. Zu diesen APIs gehören:
- Die
File
API. - Native Bibliotheken, z. B.
fopen()
.
Zugriff auf Daten aus anderen Apps
Zum Schutz der Privatsphäre der Nutzer wird auf Geräten mit Android 11 oder höher der Zugriff Ihrer App auf die privaten Verzeichnisse anderer Apps weiter eingeschränkt.
Zugriff auf Datenverzeichnisse im internen Speicher
Android 9 (API-Level 28) beschränkte, welche Apps die Dateien in ihren Datenverzeichnissen im internen Speicher für andere Apps 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.
Für Android 11 wird diese Einschränkung erweitert. 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 auf externem Speicher
Unter Android 11 können Apps nicht mehr auf Dateien in einem beliebigen dedizierten, app-spezifischen Verzeichnis einer anderen App 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 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 Speicher-Volumes.
- Das Stammverzeichnis jedes SD-Karten-Volumes, das der Gerätehersteller als zuverlässig einstuft, unabhängig davon, ob die Karte emuliert oder entfernt wird. Ein zuverlässiges Volume ist ein Volume, auf das eine Anwendung 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 Nutzer zum Auswählen einzelner Dateien aus den folgenden Verzeichnissen anzufordern:
- Das Verzeichnis
Android/data/
und alle Unterverzeichnisse. - Das Verzeichnis
Android/obb/
und alle Unterverzeichnisse.
Änderung testen
So testen Sie diese Verhaltensänderung:
- Rufen Sie einen Intent mit der Aktion
ACTION_OPEN_DOCUMENT
auf. Die VerzeichnisseAndroid/data/
undAndroid/obb/
dürfen nicht beide angezeigt werden. - Führen Sie einen der folgenden Schritte aus:
- Aktivieren Sie das Anwendungskompatibilitäts-Flag
RESTRICT_STORAGE_ACCESS_FRAMEWORK
. - Die Kampagne muss auf Android 11 oder höher ausgerichtet sein.
- Aktivieren Sie das Anwendungskompatibilitäts-Flag
- Rufen Sie einen Intent mit der Aktion
ACTION_OPEN_DOCUMENT_TREE
auf. Prüfen Sie, ob das VerzeichnisDownload
angezeigt wird und die damit verknüpfte Aktionsschaltfläche ausgegraut ist.
Berechtigungen
In Android 11 wurden die folgenden Änderungen an den Speicherberechtigungen vorgenommen.
Targeting auf beliebige Version
Die folgenden Änderungen treten in Android 11 unabhängig von der SDK-Zielversion Ihrer App in Kraft:
- Die Laufzeitberechtigung Storage wird in Dateien und Medien umbenannt.
Wenn deine App den bezogenen Speicher nicht deaktiviert und die Berechtigung
READ_EXTERNAL_STORAGE
anfordert, sehen Nutzer ein anderes Dialogfeld als Android 10. Im Dialogfeld wird angezeigt, dass Ihre Anwendung Zugriff auf Fotos und Medien anfordert, wie in Abbildung 1 dargestellt.Nutzer können in den Systemeinstellungen sehen, welche Apps die Berechtigung
READ_EXTERNAL_STORAGE
haben. Auf der Seite Einstellungen > Datenschutz > Berechtigungsmanager > Dateien und Medien wird jede App mit der Berechtigung unter Für alle Dateien zugelassen aufgeführt. Wenn deine App auf Android 11 ausgerichtet ist, solltest du beachten, dass der Zugriff auf alle Dateien schreibgeschützt ist. Zum Lesen und Schreiben aller Dateien im freigegebenen Speicher mit dieser App benötigen Sie die Berechtigung Zugriff auf alle Dateien.
Auf Android 11 ausrichten
Wenn deine App auf Android 11 ausgerichtet ist, bieten die Berechtigungen WRITE_EXTERNAL_STORAGE
und 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. Nur die erforderlichen Berechtigungen anfordern, wenn Sie mit Mediendateien in Ihrer Anwendung arbeiten
Zugriff auf alle Dateien
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 zentralen Anwendungsfall, der einen umfassenden Zugriff auf Dateien auf einem Gerät erfordert, wobei die Best Practices für datenschutzfreundliches Speichern jedoch nicht effizient sind. Android bietet für diese Situationen einen speziellen App-Zugriff mit der Bezeichnung 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 beim Speicherplatz in Android 11 finden Sie in den folgenden Materialien: