Dateien mit dem Storage Access Framework öffnen

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 und ACTION_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:

Abbildung 1 Datenmodell des Dokumentanbieters. Ein Stammknoten verweist auf ein einzelnes Dokument, von dem aus die Verzweigung des Baums beginnt.

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 und FLAG_SUPPORTS_THUMBNAIL. Dasselbe COLUMN_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 DocumentsProviderAPI 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:

Abbildung 2. Ablauf des Storage Access Framework.

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 oder ACTION_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.

Ordnerauswahl in der Systemauswahl
Abbildung 3 Auswahl, in der der Ordner „Downloads“ als Suchort ausgewählt ist

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.

Abbildung 4: Bilder, die im Ordner „Downloads“ gespeichert sind und in der Systemauswahl angezeigt werden.

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