Mit Android 4.4 (API-Level 19) wird das Storage Access Framework (SAF) eingeführt. Mit der SAF können Nutzer Dokumente, Bilder und andere Dateien auf allen ihren bevorzugten Anbietern für die Dokumentspeicherung suchen und öffnen. Eine standardmäßige, nutzerfreundliche UI ermöglicht es Nutzern, Dateien zu durchsuchen und auf die zuletzt verwendeten Dateien für alle Anwendungen und Anbieter einheitlich zuzugreifen.
Cloud- oder lokale Speicherdienste können an diesem System teilnehmen, indem sie einen DocumentsProvider
implementieren, der ihre Dienste enthält. Clientanwendungen, die Zugriff auf die Dokumente eines Anbieters benötigen, können mit einigen wenigen Codezeilen in die SAF integriert werden.
Die SAF umfasst Folgendes:
- Dokumentanbieter:Ein Inhaltsanbieter, mit dem ein Speicherdienst wie Google Drive die von ihm verwalteten Dateien anzeigen kann. Ein Dokumentanbieter wird als abgeleitete Klasse der
DocumentsProvider
-Klasse implementiert. Das Schema des Dokumentanbieters basiert auf einer herkömmlichen Dateihierarchie, wobei Sie selbst entscheiden, wie Ihr Dokumentanbieter Daten physisch speichert. Die Android-Plattform umfasst mehrere integrierte Dokumentanbieter wie 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. - Picker:Eine System-UI, mit der Nutzer auf Dokumente von allen Dokumentanbietern zugreifen können, die die Suchkriterien der Clientanwendung erfüllen.
SAF bietet folgende Funktionen:
- Damit können Nutzer Inhalte von allen Dokumentanbietern durchsuchen, nicht nur aus einer einzelnen App.
- Ermöglicht Ihrer Anwendung langfristigen, dauerhaften Zugriff auf Dokumente, die einem Dokumentanbieter gehören. Über diesen Zugriff können Nutzer Dateien beim Anbieter hinzufügen, bearbeiten, speichern und löschen.
- Unterstützt mehrere Nutzerkonten und vorübergehende Root-Zertifikate, z. B. USB-Speicheranbieter, die nur angezeigt werden, wenn das Laufwerk angeschlossen ist.
Übersicht
Die SAF ist um einen Contentanbieter aufgebaut, der eine Unterklasse der DocumentsProvider
-Klasse ist. Innerhalb eines Dokumentanbieters sind die Daten in einer traditionellen Dateihierarchie strukturiert:
Beachten Sie Folgendes:
- Jeder Dokumentanbieter meldet einen oder mehrere Stammknoten, die als Ausgangspunkt zum Erkunden einer Dokumentstruktur dienen.
Jeder Stamm hat eine eindeutige
COLUMN_ROOT_ID
und verweist auf ein Dokument (ein Verzeichnis), das den Inhalt unter diesem Stammverzeichnis darstellt. Roots sind dynamisch und unterstützen Anwendungsfälle wie mehrere Konten, temporäre USB-Speichergeräte oder die An- und Abmeldung von Nutzern. - Unter jedem Stamm befindet sich ein einzelnes Dokument. Dieses Dokument verweist auf 1 bis N Dokumente, von denen jedes wiederum auf 1 bis N Dokumente verweisen kann.
- Jedes Speicher-Back-End ruft einzelne Dateien und Verzeichnisse auf, indem es mit einer eindeutigen
COLUMN_DOCUMENT_ID
darauf verweist. Dokument-IDs sind eindeutig und ändern sich nach der Ausgabe nicht, da sie für dauerhafte URI-Berechtigungen bei Geräteneustarts verwendet werden. - Dokumente können entweder eine öffnebare Datei mit einem bestimmten MIME-Typ oder ein Verzeichnis sein, das zusätzliche Dokumente mit dem MIME-Typ
MIME_TYPE_DIR
enthält. - Jedes Dokument kann unterschiedliche Berechtigungen haben, wie unter
COLUMN_FLAGS
beschrieben. Beispiel:FLAG_SUPPORTS_WRITE
,FLAG_SUPPORTS_DELETE
undFLAG_SUPPORTS_THUMBNAIL
. DerselbeCOLUMN_DOCUMENT_ID
kann in mehreren Verzeichnissen enthalten sein.
Ablaufsteuerung
Das Datenmodell des Dokumentanbieters basiert auf einer herkömmlichen Dateihierarchie. Allerdings können Sie Ihre Daten so speichern, wie Sie möchten, solange Sie über die DocumentsProvider
API darauf zugreifen können. Sie können beispielsweise Tag-basierten Cloud-Speicher für Ihre Daten verwenden.
Abbildung 2 zeigt, wie eine Foto-App mithilfe von SAF auf gespeicherte Daten zugreifen kann:
Beachten Sie Folgendes:
- In der SAF interagieren Anbieter und Kunden nicht direkt. Ein Client fordert die Berechtigung zum Interagieren mit Dateien an, d. h. zum Lesen, Bearbeiten, Erstellen oder Löschen von Dateien.
- 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 zu verfeinern, z. B. „Gib mir alle öffnebaren Dateien mit dem MIME-Typ ‚Image‘“. - Sobald der Intent ausgelöst wird, geht die Systemauswahl an jeden registrierten Anbieter und zeigt dem Nutzer die übereinstimmenden Inhaltsstämme an.
- Die Auswahl bietet Nutzern eine Standardoberfläche für den Zugriff auf Dokumente, auch wenn die zugrunde liegenden Dokumentanbieter sehr unterschiedlich sind. Abbildung 2 zeigt beispielsweise einen Google Drive-, einen USB- und einen Cloud-Anbieter.
In Abbildung 3 wählt der Nutzer den Ordner „Downloads“ aus einer Auswahl aus, die bei einer Suche nach Bildern geöffnet wird. In der Auswahl werden auch alle Stammknoten angezeigt, die für die Client-App verfügbar sind.
Nachdem der Nutzer den Ordner „Downloads“ ausgewählt hat, werden die Bilder angezeigt. Abbildung 4 zeigt das Ergebnis dieses Prozesses. Der Nutzer kann jetzt auf die vom Anbieter und die Client-App unterstützte Weise mit den Bildern interagieren.
Clientanwendung schreiben
Wenn Ihre App unter Android 4.3 und niedriger eine Datei aus einer anderen App abrufen soll, muss sie einen Intent wie ACTION_PICK
oder ACTION_GET_CONTENT
aufrufen. Die Nutzenden wählen dann eine einzelne
App aus, aus der sie eine Datei auswählen. Die ausgewählte Anwendung muss eine Benutzeroberfläche bereitstellen, in der der Nutzer suchen und aus den verfügbaren Dateien auswählen kann.
Unter Android 4.4 (API-Level 19) und höher können Sie zusätzlich den Intent ACTION_OPEN_DOCUMENT
verwenden. Dieser zeigt eine systemgesteuerte Auswahl-UI an, über die der Nutzer alle Dateien durchsuchen kann, die von anderen Apps zur Verfügung gestellt wurden. Über diese Benutzeroberfläche kann der Nutzer eine Datei aus einer der unterstützten Anwendungen auswählen.
Unter Android 5.0 (API-Level 21) und höher können Sie auch den Intent ACTION_OPEN_DOCUMENT_TREE
verwenden. Damit kann der Nutzer ein Verzeichnis auswählen, auf das eine Client-App zugreifen kann.
Hinweis : ACTION_OPEN_DOCUMENT
ist kein Ersatz für ACTION_GET_CONTENT
.
Welche Methode Sie verwenden, hängt von den Anforderungen Ihrer App ab:
- Verwenden Sie
ACTION_GET_CONTENT
, wenn Ihre Anwendung Daten lesen oder importieren soll. Bei diesem Ansatz importiert die Anwendung eine Kopie der Daten, z. B. eine Bilddatei. - Verwenden Sie
ACTION_OPEN_DOCUMENT
, wenn Ihre Anwendung langfristigen, persistenten Zugriff auf Dokumente haben soll, die einem Dokumentanbieter gehören. Ein Beispiel ist eine Fotobearbeitungs-App, mit der Nutzer Bilder bearbeiten können, die in einem Dokumentanbieter gespeichert sind.
Weitere Informationen dazu, wie Sie über die Benutzeroberfläche der Systemauswahl nach Dateien und Verzeichnissen suchen können, finden Sie in der Anleitung zum Zugriff auf Dokumente und andere Dateien.
Weitere Informationen
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