Hilfe, mein Storage-Access-Framework-Provider spinnt

Das mit Android 4.4 eingeführte Storage Access Framework ist bei Endanwendern nicht sonderlich beliebt, da es den freien Zugriff auf die SD-Karte einschränkt. Für Anbieter von Cloud-Storages ist es ein Geschenk; das lästige Umwerben von Entwicklern entfällt ersatzlos.

vorlesen Druckansicht
Lesezeit: 2 Min.
Von
  • Tam Hanna
  • Tam Hanna

Das mit Android 4.4 eingeführte Storage Access Framework ist bei Endanwendern nicht sonderlich beliebt, da es den freien Zugriff auf die SD-Karte einschränkt. Für Anbieter von Cloud-Storages ist es ein Geschenk – das lästige Umwerben von Entwicklern entfällt ersatzlos.

Leider gibt es einige klassische "Pain Points", an denen man sich beim Entwickeln eines SAF-Providers aufhängen kann. Problem Nummer eins betrifft das Absenden eines OpenDocument-Intents. Mancher Programmierer würden das folgendermaßen realisieren:

public void onClick(View v) 
{
final Intent myIntent=new Intent(Intent.ACTION_OPEN_DOCUMENT);
startActivityForResult(myIntent, 1);
}

Während der Ausführung tritt eine ActivityNotFoundException gemäß folgendem Schema auf:

12-11 09:36:41.067: E/AndroidRuntime(1805): android.content.ActivityNotFoundException: No Activity found to handle Intent 
{ act=android.intent.action.OPEN_DOCUMENT }

Erfreulicherweise ist es nicht schwierig, dieses Problem zu umschiffen. Wer einen MIME-Typ – und sei es * – angibt, kann wie gewohnt mit dem System interagieren:

public void onClick(View v) 
{
final Intent myIntent=new Intent(Intent.ACTION_OPEN_DOCUMENT);
myIntent.setType("*/*");
startActivityForResult(myIntent, 1);
}

Falle Nummer zwei betrifft all jene Entwickler, die ihren für Android 4.4 erstellten Provider mit folgendem aus Android L stammenden Snippet aufrufen möchten und sich dann über das Fehlen des Providers wundern:

Intent myOpenDirIntent=new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(myOpenDirIntent,22);

Das hier auftretende Problem erschließt sich bei logischer Betrachtung des Aufrufs. OPEN_DOCUMENT_TREE ist ein unabhängiger Intent, der mit OPEN_DOCUMENT nichts zu tun hat. Wenn ihr nur mit OPEN_DOCUMENT verbundener Provider hier angezeigt werden würde, so läge ein Systemfehler vor... ()