Speicherupdates in Android 11

Android 11 (API-Level 30) bietet noch besseren Schutz für App- und Nutzerdaten auf externen Speichermedien. In diesem Release wurden mehrere Verbesserungen eingeführt, z. B. der Zugriff auf Rohdateipfade, Batchbearbeitungsvorgänge für Media und eine aktualisierte Benutzeroberfläche für das Storage Access Framework.

Das Release bietet auch Verbesserungen für Scoped Storage, wodurch es Entwicklern leichter fällt, ihre Speicheranwendungsfälle zu erfüllen, nachdem sie zu diesem Speichermodell migriert sind.

Erzwingen 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 Apps vorübergehend die Änderungen deaktivieren, die mit dem eingeschränkten Speicher verbunden sind, z. B. den Zugriff auf verschiedene Verzeichnisse und verschiedene Arten von Mediendateien. Nachdem Sie Ihre App so aktualisiert haben, dass sie auf Android 11 ausgerichtet ist, ignoriert das System das Flag requestLegacyExternalStorage.

Kompatibilität mit Android 10 beibehalten

Wenn Ihre App auf Geräten mit Android 10 die Funktion „Speicher mit beschränktem Zugriff“ nicht nutzt, empfehlen wir, requestLegacyExternalStorage weiterhin auf true in der Manifestdatei Ihrer App festzulegen. So kann sich Ihre App auf Geräten mit Android 10 weiterhin wie erwartet verhalten.

Daten in Verzeichnisse migrieren, die bei Verwendung von Scoped Storage sichtbar sind

Wenn Ihre App das alte 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 Scoped Storage aktiviert ist. Bevor Sie Android 11 als Ziel festlegen, müssen Sie Daten in ein Verzeichnis migrieren, das mit dem eingeschränkten Speicher kompatibel ist.

Begrenzten Speicher testen

Wenn Sie in Ihrer App die Funktion „Speicher mit beschränktem Zugriff“ aktivieren möchten, müssen Sie unabhängig von der Ziel-SDK-Version und den Manifest-Flag-Werten die folgenden Flags für die App-Kompatibilität aktivieren:

Wenn Sie den bereichsbezogenen Speicher deaktivieren und stattdessen das alte Speichermodell verwenden möchten, müssen Sie beide Flags aufheben.

Speicherplatz auf Gerät verwalten

Ab Android 11 können Apps, die das Modell für eingeschränkten Speicher verwenden, nur auf ihre eigenen app-spezifischen Cache-Dateien zugreifen. Wenn Ihre App den Gerätespeicher verwalten muss, folgen Sie der Anleitung zum Abfragen von freiem Speicherplatz.

  1. Prüfen Sie den freien Speicherplatz, indem Sie die Intent-Aktion ACTION_MANAGE_STORAGE aufrufen.
  2. 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_CACHE auf.

App-spezifisches Verzeichnis auf externem Speicher

Ab Android 11 können Apps kein eigenes app-spezifisches Verzeichnis auf dem externen Speicher erstellen. Rufen Sie getExternalFilesDirs() auf, um auf das Verzeichnis zuzugreifen, das das System für Ihre App bereitstellt.

Zugriff auf Mediendateien

Um den Zugriff auf Medien zu erleichtern und gleichzeitig die Privatsphäre der Nutzer zu wahren, bietet Android 11 die folgenden Funktionen.

Batchvorgänge ausführen

Für mehr Konsistenz auf verschiedenen Geräten und eine bessere Nutzerfreundlichkeit bietet Android 11 mehrere Methoden, die die Verwaltung von Gruppen von Mediendateien erleichtern.

Über direkte Dateipfade und native Bibliotheken auf Dateien zugreifen

Damit Ihre App reibungsloser mit Mediatheken von Drittanbietern zusammenarbeitet, können Sie in Android 11 für den Zugriff auf Mediendateien aus dem freigegebenen Speicher direkte Dateipfade verwenden und dabei andere APIs als die MediaStore API nutzen. Dazu gehören:

  • Die File API.
  • Native Bibliotheken, z. B. 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 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 weltweit zugänglich machen können. Apps, die auf Android 9 oder höher ausgerichtet sind, dürfen die Dateien in ihren Datenverzeichnissen nicht für alle zugänglich machen.

In 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, auch wenn die andere App auf Android 8.1 (API-Level 27) oder niedriger ausgerichtet ist und die Dateien in ihrem Datenverzeichnis weltweit lesbar gemacht hat.

Zugriff auf app-spezifische Verzeichnisse im externen Speicher

Unter Android 11 können Apps nicht mehr auf Dateien im beliebigen anderen app-spezifischen Verzeichnis einer App im externen Speicher zugreifen.

Einschränkungen des Dokumentzugriffs

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 Speichervolumes.
  • Das Stammverzeichnis jedes SD-Karten-Volumes, das der Gerätehersteller als zuverlässig betrachtet, unabhängig davon, ob die Karte emuliert oder entfernbar 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:

  1. Einen Intent mit der Aktion ACTION_OPEN_DOCUMENT aufrufen Prüfen Sie, ob die Verzeichnisse Android/data/ und Android/obb/ nicht angezeigt werden.
  2. Führen Sie einen der folgenden Schritte aus:
  3. Einen Intent mit der Aktion ACTION_OPEN_DOCUMENT_TREE aufrufen Prüfen Sie, ob das Verzeichnis Download angezeigt wird und die Aktionsschaltfläche, die dem Verzeichnis zugeordnet ist, ausgegraut ist.

Berechtigungen

In Android 11 werden die folgenden Änderungen an den Speicherberechtigungen eingeführt.

Auf jede Version ausrichten

Im ersten Dialogfeld wird ein Link mit dem Namen „In den Einstellungen zulassen“ angezeigt.
Abbildung 1: Dialogfeld, das angezeigt wird, wenn eine App den begrenzten Speicher verwendet und die Berechtigung 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 wurde in Dateien und Medien umbenannt.
  • Wenn Ihre App nicht auf die Verwendung von Speicher mit beschränktem Zugriff verzichtet und die Berechtigung READ_EXTERNAL_STORAGE anfordert, sehen Nutzer ein anderes Dialogfeld als unter Android 10. Im Dialogfeld wird angezeigt, dass Ihre App Zugriff auf Fotos und Medien anfordert (siehe Abbildung 1).

    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, die die Berechtigung hat, unter Für alle Dateien zulässig aufgeführt. Wenn Ihre App für Android 11 entwickelt wurde, ist der Zugriff auf „alle Dateien“ nur als Lesezugriff möglich. Wenn Sie mit dieser App alle Dateien im gemeinsamen Speicher lesen und schreiben möchten, benötigen Sie die Berechtigung Zugriff auf alle Dateien.

Android 11 als Zielversion festlegen

Wenn Ihre App auf Android 11 ausgerichtet ist, bieten 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 Ihre App zu genau definierten Mediensammlungen wie MediaStore.Downloads beitragen, ohne dass speicherbezogene Berechtigungen angefordert werden müssen. Weitere Informationen zum Anfordern nur der erforderlichen Berechtigungen bei der Arbeit mit Mediendateien in Ihrer App

Zugriff auf alle Dateien

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 einen Hauptanwendungsfall, der einen umfassenden Zugriff auf Dateien auf einem Gerät erfordert, aber nicht effizient mit den datenschutzfreundlichen Best Practices für den 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 Änderungen am Speicher in Android 11 finden Sie in den folgenden Materialien:

Blogposts

Videos