Aucune activité trouvée pour gérer l'intention - android.intent.action.OPEN_DOCUMENT
Question
Je m'essaye au Storage Access Framework d'Android 4.4
J'ai développé une application factice qui déclenche une intention au début de l'activité.
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(intent, READ_REQUEST_CODE);
J'ai également développé une autre application factice qui sert de fournisseur de fichiers.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.saf"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="19"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.saf.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<provider
android:name="com.example.saf.MyFileProvider"
android:authorities="com.example.saf.documents"
android:exported="@bool/is_kitkat"
android:enabled="@bool/is_kitkat"
android:grantUriPermissions="@bool/is_kitkat"
android:permission="android.permission.MANAGE_DOCUMENTS">
<intent-filter>
<action android:name="android.content.action.DOCUMENTS_PROVIDER" />
</intent-filter>
</provider>
</application>
J'ai implémenté la classe MyFileProvider.
Mais lorsque je lance l'application utilisateur (celle qui déclenche l'intention), j'obtiens l'erreur suivante
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.OPEN_DOCUMENT cat=[android.intent.category.OPENABLE] }
Je suivais simplement la documentation des développeurs d'Android.Avez-vous une idée de ce que je pourrais faire de mal ?
Modifier:Voici mon dernier manifeste.Dois-je également avoir une implémentation « appropriée » de MyFileProvider « étend DocumentsProvider » ?Puis-je simplement renvoyer null dans les fonctions pour l'instant ?
La solution
Ajoutez un type MIME, ou simplement intent.setType("*/*")
.
Cela semble être un problème connu. setType()
est requis.
Modifier:il faut aussi ajouter android:enabled="true"
, notez que vous devez le référencer à partir de valeurs et non directement afin de l'activer uniquement pour >=kitkat.Donc android:enabled="@bool/is_kitkat"
, <bool name="atLeastKitKat">false</bool>
dans /res/values/
et <bool name="atLeastKitKat">true</bool>
dans /res/values-v19/
Autres conseils
Pour ouvrir tous les fichiers Ajoutez cette ligne:
intent.setType("*/*") ;
Et si vous devez filtrer pour afficher des images, ajoutez cette ligne:
intent.setType("image/*");
juste jeter votre intention, comme,
Intent intent = new Intent("android.intent.action.GET_CONTENT");
((Intent)intent).addCategory("android.intent.category.OPENABLE");
((Intent)intent).setType("*/*");