© Excellent backgrounds/Shutterstock.com
Java Magazin
Das Storage Access Framework

Android und die Cloud

Dank Always-on und Highspeed-Internet scheinen Cloud-basierte Storage-Dienste wie Box, Google Drive oder Dropbox besonders für mobile Devices eine ideale Speicherlösung zu sein. Entsprechende Apps der Hersteller ermöglichen dabei den Zugriff vom Smartphone oder Tablet auf das jeweilige System. Wie aber sieht es aus, wenn man aus der eigenen Anwendung heraus auf einen der Cloud-Storages zugreifen möchte? Gar nicht mal so schlecht - dank Storage Access Framework.

Arne Limburg, Lars Röwekamp


Wollte man in der Ära vor Android 4.4 aus der eigenen App heraus auf Cloud-basierte Storage-Systeme zugreifen, waren dafür in der Regel proprietäre APIs oder individuelle Zugriffsprotolle der verschiedenen Anbieter notwendig. Zwar bieten nahezu alle bekannten Dienste die zum Lesen und Schreiben von beliebigen Dokumenten notwendigen SDKs an (Google Drive [1], Box [2], Dropbox [3]), dies schützt aber leider nicht davor, dass bei diesem Weg je angebundenen System eine eigene Lösung implementiert werden muss.

Genau an diesem Problem setzt das neue Storage Access Framework (SAF) an. Aus Sicht des Anwenders bietet es ein einfaches und einheitliches User Interface (Document Picker) zum Browsen, Auswählen, Erstellen und Löschen von Dateien auf internen oder externen Speichersystemen – aka Document Provider. Neben lokalen Providern auf dem Device selbst oder Cloud-basierten Lösungen im „Nirgendwo“ können dies auch temporär zur Verfügung stehende Systeme, wie zum Beispiel USB-Sticks, sein.

Globales Lesen erlaubt ...

Möchte man aus einer eigenen Anwendung heraus mittels SAF ein Dokument eines bestimmten Typs, in unserem Beispiel ein Bild, öffnen, reicht der Aufruf der Methode startActivityForResult mit entsprechendem Intent (Listing 1, gekürzt aus [4]).

Listing 1: Abfrage zum Öffnen eines Bildspublic void performImageSearch() {  // choose a file via the system's filebrowser Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);  // Filter to only show results that can be "opened" intent.addCategory(Intent.CATEGORY_OPENABLE);  // Filter to show only images, using the image MIME data type. intent.setType("image/*");  startActivityForResult(intent, SEARCH_IMAGE_REQUEST_CODE);}

Dank der gewählten Intent Action ACTION_OPEN_DOCUMENT wird von Android automatisch der Document Picker gestartet und alle DocumentProvider zur Auswahl angezeigt, die sich bei ihrer Installation für den gewünschten Contenttyp registriert haben. In unserem Beispiel werden also alle Document Provider aufgelistet, die potenziell Bilder zur Verfügung stellen.

Nach erfolgter Auswahl eines speziellen Bilds im Picker springt Android nun direkt in die Callback-Methode onActivityResult und ermöglicht so den Zugriff auf dessen URI (Listing 2).

Listing 2: URI des ausgewählten Bilds abfragenpublic void onActivityResult(int requestCode, int resultCode, Intent resultData) {  // The ACTION_OPEN_DOCUMENT intent was sent with the request code // SEARCH_IMAGE_REQUEST_CODE. If the request code seen here does...

Java Magazin
Das Storage Access Framework

Android und die Cloud

Dank Always-on und Highspeed-Internet scheinen Cloud-basierte Storage-Dienste wie Box, Google Drive oder Dropbox besonders für mobile Devices eine ideale Speicherlösung zu sein. Entsprechende Apps der Hersteller ermöglichen dabei den Zugriff vom Smartphone oder Tablet auf das jeweilige System. Wie aber sieht es aus, wenn man aus der eigenen Anwendung heraus auf einen der Cloud-Storages zugreifen möchte? Gar nicht mal so schlecht - dank Storage Access Framework.

Arne Limburg, Lars Röwekamp


Wollte man in der Ära vor Android 4.4 aus der eigenen App heraus auf Cloud-basierte Storage-Systeme zugreifen, waren dafür in der Regel proprietäre APIs oder individuelle Zugriffsprotolle der verschiedenen Anbieter notwendig. Zwar bieten nahezu alle bekannten Dienste die zum Lesen und Schreiben von beliebigen Dokumenten notwendigen SDKs an (Google Drive [1], Box [2], Dropbox [3]), dies schützt aber leider nicht davor, dass bei diesem Weg je angebundenen System eine eigene Lösung implementiert werden muss.

Genau an diesem Problem setzt das neue Storage Access Framework (SAF) an. Aus Sicht des Anwenders bietet es ein einfaches und einheitliches User Interface (Document Picker) zum Browsen, Auswählen, Erstellen und Löschen von Dateien auf internen oder externen Speichersystemen – aka Document Provider. Neben lokalen Providern auf dem Device selbst oder Cloud-basierten Lösungen im „Nirgendwo“ können dies auch temporär zur Verfügung stehende Systeme, wie zum Beispiel USB-Sticks, sein.

Globales Lesen erlaubt ...

Möchte man aus einer eigenen Anwendung heraus mittels SAF ein Dokument eines bestimmten Typs, in unserem Beispiel ein Bild, öffnen, reicht der Aufruf der Methode startActivityForResult mit entsprechendem Intent (Listing 1, gekürzt aus [4]).

Listing 1: Abfrage zum Öffnen eines Bildspublic void performImageSearch() {  // choose a file via the system's filebrowser Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);  // Filter to only show results that can be "opened" intent.addCategory(Intent.CATEGORY_OPENABLE);  // Filter to show only images, using the image MIME data type. intent.setType("image/*");  startActivityForResult(intent, SEARCH_IMAGE_REQUEST_CODE);}

Dank der gewählten Intent Action ACTION_OPEN_DOCUMENT wird von Android automatisch der Document Picker gestartet und alle DocumentProvider zur Auswahl angezeigt, die sich bei ihrer Installation für den gewünschten Contenttyp registriert haben. In unserem Beispiel werden also alle Document Provider aufgelistet, die potenziell Bilder zur Verfügung stellen.

Nach erfolgter Auswahl eines speziellen Bilds im Picker springt Android nun direkt in die Callback-Methode onActivityResult und ermöglicht so den Zugriff auf dessen URI (Listing 2).

Listing 2: URI des ausgewählten Bilds abfragenpublic void onActivityResult(int requestCode, int resultCode, Intent resultData) {  // The ACTION_OPEN_DOCUMENT intent was sent with the request code // SEARCH_IMAGE_REQUEST_CODE. If the request code seen here does...

Neugierig geworden?


    
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang