No se encontró ninguna actividad para manejar la intención: android.intent.action.OPEN_DOCUMENT
Pregunta
Estoy probando el Storage Access Framework de Android 4.4
He desarrollado una aplicación ficticia que activa una intención al inicio de la actividad.
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(intent, READ_REQUEST_CODE);
También he desarrollado otra aplicación ficticia que sirve como proveedor de archivos.
<?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>
He implementado la clase MyFileProvider.
Pero cuando inicio la aplicación de usuario (la que activa la intención), aparece el siguiente error
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.OPEN_DOCUMENT cat=[android.intent.category.OPENABLE] }
Solo estaba siguiendo los documentos de desarrollador de Android.¿Alguna idea de lo que podría estar haciendo mal?
Editar:Aquí está mi último Manifiesto.¿También necesito tener una implementación "adecuada" de MyFileProvider "extiende DocumentsProvider"?¿Puedo simplemente devolver nulo en las funciones por ahora?
Solución
Agregue un tipo mimo, o simplemente intent.setType("*/*")
.
Esto parece ser un problema conocido. setType()
se requiere.
Editar:también necesitas agregar android:enabled="true"
, tenga en cuenta que debe hacer referencia a él desde los valores y no directamente para habilitarlo solo para >=kitkat.Entonces android:enabled="@bool/is_kitkat"
, <bool name="atLeastKitKat">false</bool>
en /res/values/
y <bool name="atLeastKitKat">true</bool>
en /res/values-v19/
Otros consejos
Para abrir todos los archivos, agregue esta línea:
intent.setType("*/*") ;
y si necesita filtrar para mostrar imágenes Agregar esta línea:
intent.setType("image/*");
acaba de emitir su intención, como,
Intent intent = new Intent("android.intent.action.GET_CONTENT");
((Intent)intent).addCategory("android.intent.category.OPENABLE");
((Intent)intent).setType("*/*");