Speicherupdates unter Android 11

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:

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.

  1. Prüfen Sie, ob freier Speicherplatz verfügbar ist, indem Sie die Intent-Aktion ACTION_MANAGE_STORAGE aufrufen.
  2. 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:

  1. Rufen Sie einen Intent mit der Aktion ACTION_OPEN_DOCUMENT auf. Die Verzeichnisse Android/data/ und Android/obb/ dürfen nicht beide angezeigt werden.
  2. Führen Sie einen der folgenden Schritte aus:
  3. Rufen Sie einen Intent mit der Aktion ACTION_OPEN_DOCUMENT_TREE auf. Prüfen Sie, ob das Verzeichnis Download 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

Im ersten Dialogfeld wird der Link „Zulassen“ in den Einstellungen angezeigt.
Abbildung 1: Dialogfeld, das angezeigt wird, wenn eine Anwendung beschränkten Speicher verwendet und die Berechtigung READ_EXTERNAL_STORAGE anfordert.

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:

Blogposts

Videos