Mit Android 4.4 (API-Ebene 19) wurde das Storage Access Framework (SAF) eingeführt. Mit dem SAF können Nutzer Dokumente, Bilder und andere Dateien bei allen ihren bevorzugten Cloud Storage-Anbietern für Dokumente suchen und öffnen. Über eine standardmäßige, nutzerfreundliche Benutzeroberfläche können Nutzer Dateien durchsuchen und auf die zuletzt verwendeten Dateien in allen Apps und bei allen Anbietern einheitlich zugreifen.
Cloud- oder lokale Speicherdienste können an diesem System teilnehmen, indem sie eine DocumentsProvider
implementieren, die ihre Dienste kapselt. Client-Apps, die Zugriff auf die Dokumente eines Anbieters benötigen, können mit wenigen Codezeilen in die SAF eingebunden werden.
Die SAF umfasst Folgendes:
- Dokumentanbieter:Ein Inhaltsanbieter, der einem Speicherdienst wie Google Drive die von ihm verwalteten Dateien offenlegt. Ein Dokumentanbieter wird als Unterklasse der Klasse
DocumentsProvider
implementiert. Das Schema für Dokumentanbieter basiert auf einer traditionellen Dateihierarchie. Wie Ihr Dokumentanbieter Daten physisch speichert, liegt jedoch in Ihrem Ermessen. Die Android-Plattform enthält mehrere integrierte Dokumentanbieter, z. B. Downloads, Bilder und Videos. - Client-App:Eine benutzerdefinierte App, die die Intent-Aktionen
ACTION_CREATE_DOCUMENT
,ACTION_OPEN_DOCUMENT
undACTION_OPEN_DOCUMENT_TREE
aufruft und die von Dokumentanbietern zurückgegebenen Dateien empfängt. - Auswahl:Eine System-UI, über die Nutzer auf Dokumente aller Dokumentanbieter zugreifen können, die die Suchkriterien der Client-App erfüllen.
SAF bietet folgende Funktionen:
- Nutzer können Inhalte von allen Dokumentenanbietern durchsuchen, nicht nur von einer einzelnen App.
- Ermöglicht Ihrer App einen langfristigen, dauerhaften Zugriff auf Dokumente, die einem Dokumentenanbieter gehören. Über diesen Zugriff können Nutzer Dateien beim Anbieter hinzufügen, bearbeiten, speichern und löschen.
- Unterstützt mehrere Nutzerkonten und temporäre Stammverzeichnisse wie USB-Speicheranbieter, die nur angezeigt werden, wenn das Laufwerk angeschlossen ist.
Übersicht
Der SAF dreht sich um einen Contentanbieter, der eine Unterklasse der DocumentsProvider
-Klasse ist. Bei einem Dokumentanbieter sind die Daten in einer herkömmlichen Dateihierarchie strukturiert:

Beachten Sie Folgendes:
- Jeder Dokumentanbieter meldet eine oder mehrere Wurzeln, die Ausgangspunkt für die Suche in einem Dokumentenbaum sind.
Jeder Stamm hat eine eindeutige
COLUMN_ROOT_ID
und verweist auf ein Dokument (ein Verzeichnis), das den Inhalt unter diesem Stamm darstellt. Wurzeln sind von Natur aus dynamisch, um Anwendungsfälle wie mehrere Konten, temporäre USB-Speichergeräte oder die Anmeldung und Abmeldung von Nutzern zu unterstützen. - Unter jedem Stamm befindet sich ein einzelnes Dokument. Dieses Dokument verweist auf 1 bis N Dokumente, die wiederum auf 1 bis N Dokumente verweisen können.
- Jedes Speicher-Backend stellt einzelne Dateien und Verzeichnisse bereit, indem es auf sie mit einer eindeutigen
COLUMN_DOCUMENT_ID
verweist. Dokument-IDs sind eindeutig und ändern sich nach der Ausstellung nicht, da sie für dauerhafte URI-Berechtigungen über Geräteneustarts hinweg verwendet werden. - Dokumente können entweder eine öffnebare Datei mit einem bestimmten MIME-Typ oder ein Verzeichnis mit zusätzlichen Dokumenten mit dem MIME-Typ
MIME_TYPE_DIR
sein. - Jedes Dokument kann unterschiedliche Funktionen haben, wie in
COLUMN_FLAGS
beschrieben. Beispiel:FLAG_SUPPORTS_WRITE
,FLAG_SUPPORTS_DELETE
undFLAG_SUPPORTS_THUMBNAIL
. DasselbeCOLUMN_DOCUMENT_ID
kann in mehreren Verzeichnissen enthalten sein.
Kontrollfluss
Das Datenmodell des Dokumentanbieters basiert auf einer traditionellen Dateihierarchie. Sie können Ihre Daten jedoch beliebig speichern, solange Sie über die DocumentsProvider
API darauf zugreifen können. Sie können beispielsweise tagbasierten Cloud-Speicher für Ihre Daten verwenden.
Abbildung 2 zeigt, wie eine Foto-App die SAF verwenden könnte, um auf gespeicherte Daten zuzugreifen:

Beachten Sie Folgendes:
- In der SAF interagieren Anbieter und Kunden nicht direkt miteinander. Ein Client fordert die Berechtigung an, mit Dateien zu interagieren, d. h. Dateien zu lesen, zu bearbeiten, zu erstellen oder zu löschen.
- Die Interaktion beginnt, wenn eine Anwendung, in diesem Beispiel eine Foto-App, den Intent
ACTION_OPEN_DOCUMENT
oderACTION_CREATE_DOCUMENT
auslöst. Der Intent kann Filter enthalten, um die Kriterien weiter einzugrenzen, z. B. „Gib mir alle öffnebaren Dateien mit dem MIME-Typ ‚image‘.“ - Sobald die Absicht ausgelöst wird, ruft die Systemauswahl jeden registrierten Anbieter auf und zeigt dem Nutzer die entsprechenden Inhaltsknoten an.
- Die Auswahl bietet Nutzern eine standardmäßige Benutzeroberfläche für den Zugriff auf Dokumente, auch wenn die zugrunde liegenden Dokumentanbieter sehr unterschiedlich sind. Abbildung 2 zeigt beispielsweise einen Google Drive-Anbieter, einen USB-Anbieter und einen Cloud-Anbieter.
In Abbildung 3 wählt der Nutzer den Ordner „Downloads“ aus einer Auswahl aus, die in einer Suche nach Bildern geöffnet wurde. Die Auswahl enthält auch alle für die Client-App verfügbaren Stammverzeichnisse.
Nachdem der Nutzer den Ordner „Downloads“ ausgewählt hat, werden die Bilder angezeigt. Abbildung 4 zeigt das Ergebnis dieses Prozesses. Der Nutzer kann jetzt mit den Bildern auf die vom Anbieter und der Client-App unterstützte Weise interagieren.
Client-Anwendung schreiben
Wenn Sie unter Android 4.3 oder niedriger eine Datei von einer anderen App abrufen möchten, muss Ihre App einen Intent wie ACTION_PICK
oder ACTION_GET_CONTENT
aufrufen. Der Nutzer wählt dann eine einzelne App aus, aus der er eine Datei auswählen möchte. Die ausgewählte App muss eine Benutzeroberfläche bieten, über die Nutzer die verfügbaren Dateien durchsuchen und auswählen können.
Unter Android 4.4 (API-Level 19) und höher haben Sie zusätzlich die Möglichkeit, die ACTION_OPEN_DOCUMENT
-Intent zu verwenden. Daraufhin wird eine systemgesteuerte Auswahloberfläche angezeigt, über die Nutzer alle Dateien durchsuchen können, die andere Apps verfügbar gemacht haben. Über diese einheitliche Benutzeroberfläche kann der Nutzer eine Datei aus einer der unterstützten Apps auswählen.
Unter Android 5.0 (API-Ebene 21) und höher können Sie auch die ACTION_OPEN_DOCUMENT_TREE
-Intent verwenden, mit der Nutzer ein Verzeichnis für den Zugriff einer Client-App auswählen können.
Hinweis : ACTION_OPEN_DOCUMENT
ist kein Ersatz für ACTION_GET_CONTENT
.
Welche Sie verwenden, hängt von den Anforderungen Ihrer App ab:
- Verwenden Sie
ACTION_GET_CONTENT
, wenn Ihre App Daten lesen oder importieren soll. Bei diesem Ansatz importiert die App eine Kopie der Daten, z. B. eine Bilddatei. - Verwenden Sie
ACTION_OPEN_DOCUMENT
, wenn Ihre App dauerhaften Zugriff auf Dokumente eines Dokumentanbieters haben soll. Ein Beispiel ist eine Fotobearbeitungs-App, mit der Nutzer Bilder bearbeiten können, die bei einem Dokumentenanbieter gespeichert sind.
Weitere Informationen dazu, wie Sie die Suche nach Dateien und Verzeichnissen über die Systemauswahl unterstützen, finden Sie im Leitfaden zum Zugriff auf Dokumente und andere Dateien.
Zusätzliche Ressourcen
Weitere Informationen zu Dokumentanbietern finden Sie in den folgenden Ressourcen:
Produktproben
Videos
- DevBytes: Android 4.4 Storage Access Framework: Provider
- Virtuelle Dateien im Storage Access Framework