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.
- 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... ()