Android 11 (API-Level 30) bietet weitere Verbesserungen der Plattform und schützt App- und Nutzerdaten im externen Speicher besser. Diese Version bietet mehrere Verbesserungen, z. B. Zugriff auf Rohdateipfade, Bulk-Bearbeitungsvorgänge für Medien und eine aktualisierte Benutzeroberfläche für das Storage Access Framework.
Die Version bietet außerdem Verbesserungen am begrenzten Speicher, sodass Entwickler ihre Speicheranwendungsfälle nach der Migration zu diesem Speichermodell leichter erfüllen können.
Erzwingung des begrenzten Speichers
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 Apps die mit dem begrenzten Speicher verbundenen Änderungen vorübergehend deaktivieren, z. B. den Zugriff auf verschiedene Verzeichnisse und verschiedene Arten von Mediendateien. Nachdem Sie Ihre App auf Android 11 aktualisiert haben, ignoriert das System das Flag requestLegacyExternalStorage.
Kompatibilität mit Android 10 beibehalten
Wenn Ihre App auf Android 10-Geräten nicht den begrenzten Speicher verwendet, sollten Sie in der Manifestdatei Ihrer App weiterhin requestLegacyExternalStorage auf true festlegen. So kann sich Ihre App auf Geräten mit Android 10 weiterhin wie erwartet verhalten.
Daten in Verzeichnisse migrieren, die bei Verwendung des begrenzten Speichers sichtbar sind
Wenn deine App das alte Speichermodell verwendet und zuvor auf Android 10 oder niedriger ausgerichtet war, speicherst du möglicherweise Daten in einem Verzeichnis, auf das deine App nicht zugreifen kann, wenn das Modell für den begrenzten Speicher aktiviert ist. Bevor Sie Android 11 als Ziel festlegen, müssen Sie Daten in ein Verzeichnis migrieren, das mit dem begrenzten Speicher kompatibel ist.
Begrenzten Speicher testen
Wenn Sie den begrenzten Speicher in Ihrer App aktivieren möchten, unabhängig von der Ziel-SDK-Version und den Manifest-Flag-Werten Ihrer App, aktivieren Sie die folgenden App-Kompatibilitäts-Flags:
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, entfernen Sie beide Flags.
Speicherplatz auf Gerät verwalten
Ab Android 11 können Apps, die das Modell für begrenzten Speicher verwenden, nur auf ihre eigenen app-spezifischen Cache-Dateien zugreifen. Wenn deine App den Gerätespeicher verwalten muss, folge der Anleitung zum Abfragen des freien Speicherplatzes.
- Prüfen Sie, ob Speicherplatz verfügbar ist, indem Sie die Intent-Aktion
ACTION_MANAGE_STORAGEaufrufen. Wenn auf dem Gerät nicht genügend freier Speicherplatz vorhanden ist, fordere den Nutzer auf, deiner App die Berechtigung zum Löschen aller Caches zu erteilen. Rufen Sie dazu die Intent-Aktion
ACTION_CLEAR_APP_CACHEauf.
App-spezifisches Verzeichnis im externen Speicher
Ab Android 11 können Apps kein eigenes app-spezifisches Verzeichnis im externen Speicher erstellen. Wenn Sie auf das Verzeichnis zugreifen möchten, das das System für Ihre App bereitstellt, rufen Sie getExternalFilesDirs() auf.
Zugriff auf Mediendateien
Um den Zugriff auf Medien zu erleichtern und gleichzeitig den Datenschutz für Nutzer zu schützen, werden in Android 11 die folgenden Funktionen hinzugefügt.
Batchvorgänge ausführen
Für eine einheitliche Darstellung auf allen Geräten und mehr Nutzerfreundlichkeit bietet Android 11 mehrere Methoden, mit denen sich Gruppen von Mediendateien einfacher verwalten lassen.
Über direkte Dateipfade und native Bibliotheken auf Dateien zugreifen
Damit Ihre App besser 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. Diese APIs umfassen Folgendes:
- Die
FileAPI. - Native Bibliotheken wie
fopen().
Zugriff auf Daten aus anderen Apps
Aus Datenschutzgründen 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 Datenverzeichnissen im internen Speicher für andere Apps zugänglich machen können. Apps, die auf Android 9 oder höher ausgerichtet sind, können die Dateien in ihren Datenverzeichnissen nicht öffentlich 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 für alle lesbar gemacht hat.
Zugriff auf app-spezifische Verzeichnisse im externen Speicher
Unter Android 11 können Apps nicht mehr auf Dateien im dedizierten, App-spezifischen Verzeichnis anderer Apps im externen Speicher zugreifen.
Einschränkungen des Dokumentzugriffs
Damit Entwickler Zeit zum Testen haben, werden die folgenden Änderungen im Zusammenhang mit dem Storage Access Framework (SAF) nur wirksam, wenn Ihre App auf Android 11 oder höher ausgerichtet ist.
Zugriff auf Verzeichnisse
Du kannst 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 entfernbar ist. Ein zuverlässiges Volume ist ein Volume, auf das eine Anwendung meistens erfolgreich zugreifen kann.
- Das Verzeichnis
Download.
Zugriff auf Dateien
Du kannst 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:
- dem Verzeichnis
Android/data/und allen Unterverzeichnissen. - dem Verzeichnis
Android/obb/und allen Unterverzeichnissen.
Änderung testen
So testen Sie diese Verhaltensänderung:
- Rufen Sie einen Intent mit der Aktion
ACTION_OPEN_DOCUMENTauf. Prüfen Sie, ob die VerzeichnisseAndroid/data/undAndroid/obb/nicht angezeigt werden. - Führen Sie einen der folgenden Schritte aus:
- Aktivieren Sie das App-Kompatibilitäts-Flag
RESTRICT_STORAGE_ACCESS_FRAMEWORK. - Ausrichtung auf Android 11 oder höher
- Aktivieren Sie das App-Kompatibilitäts-Flag
- Rufen Sie einen Intent mit der Aktion
ACTION_OPEN_DOCUMENT_TREEauf. Prüfen Sie, ob das VerzeichnisDownloadangezeigt wird und der mit dem Verzeichnis verknüpfte Aktionsbutton ausgegraut ist.
Berechtigungen
In Android 11 werden die folgenden Änderungen in Bezug auf Speicherberechtigungen eingeführt.
Auf alle Versionen ausrichten
READ_EXTERNAL_STORAGE anfordert.Die folgenden Änderungen treten in 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_STORAGEanfordert, wird Nutzern ein anderes Dialogfeld als unter Android 10 angezeigt. Das Dialogfeld zeigt an, dass Ihre App Zugriff auf Fotos und Medien anfordert, wie in Abbildung 1 dargestellt.Nutzer können in den Systemeinstellungen sehen, welche Apps die Berechtigung
READ_EXTERNAL_STORAGEhaben. Auf der Seite Einstellungen > Datenschutz > Berechtigungsmanager > Dateien und Medien wird jede App mit der Berechtigung unter Für alle Dateien zulässig aufgeführt. Wenn deine App auf Android 11 ausgerichtet ist, ist dieser Zugriff auf „alle Dateien“ schreibgeschützt. Wenn Sie mit dieser App alle Dateien im freigegebenen Speicher lesen und beschreiben möchten, benötigen Sie die Berechtigung Zugriff auf alle Dateien.
Android 11 als Zielversion
Wenn Ihre App auf Android 11 ausgerichtet ist, bieten weder die Berechtigung WRITE_EXTERNAL_STORAGE noch die privilegierte Berechtigung WRITE_MEDIA_STORAGE zusätzlichen Zugriff.
Beachten Sie, dass Ihre App auf Geräten mit Android 10 (API-Level 29) oder höher zu klar definierten Mediensammlungen wie MediaStore.Downloads beitragen kann, ohne dass speicherbezogene Berechtigungen angefordert werden müssen. Weitere Informationen dazu, wie Sie nur die erforderlichen Berechtigungen anfordern, wenn Sie in Ihrer App mit Mediendateien arbeiten.
Zugriff auf alle Dateien
Die meisten Apps, die Zugriff auf den freigegebenen Speicher benötigen, können die Best Practices für die Freigabe von Mediendateien und die Freigabe von Nicht-Mediendateien befolgen. Einige Apps haben jedoch einen Hauptanwendungsfall, der einen umfassenden Zugriff auf Dateien auf einem Gerät erfordert, aber nicht effizient mit den Best Practices für datenschutzfreundlichen Speicher umgesetzt werden kann. Android bietet für diese Situationen einen speziellen App-Zugriff mit der Bezeichnung Zugriff auf alle Dateien. Weitere Informationen finden Sie im Leitfaden zum Verwalten aller Dateien auf einem Speichergerät.
Zusätzliche Ressourcen
Weitere Informationen zu den Änderungen am Speicher in Android 11 findest du in den folgenden Materialien: