Pergunta

Estou testando o Storage Access Framework do Android 4.4

Desenvolvi um aplicativo fictício que dispara uma intenção no início da atividade.

    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    startActivityForResult(intent, READ_REQUEST_CODE);

Também desenvolvi outro aplicativo fictício que serve como provedor de arquivos.

        <?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>

Implementei a classe MyFileProvider.

Mas quando eu inicio o aplicativo do usuário (aquele que dispara a intenção), recebo o seguinte erro

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.OPEN_DOCUMENT cat=[android.intent.category.OPENABLE] }

Eu estava apenas seguindo os documentos do desenvolvedor do Android.Alguma idéia do que posso estar fazendo de errado?

Editar:Aqui está meu último manifesto.Também preciso ter uma implementação "adequada" do MyFileProvider "extends DocumentsProvider"?Posso simplesmente retornar null nas funções por enquanto?

Foi útil?

Solução

Adicione um tipo MIME ou simplesmente intent.setType("*/*").

Isto parece ser um problema conhecido. setType() é necessário.

Editar:você também precisa adicionar android:enabled="true", observe que você deve referenciá-lo a partir de valores e não diretamente, apenas para habilitá-lo para >=kitkat.Então android:enabled="@bool/is_kitkat", <bool name="atLeastKitKat">false</bool> em /res/values/ e <bool name="atLeastKitKat">true</bool> em /res/values-v19/

Outras dicas

Para abrir todos os arquivos adicione esta linha:

intent.setType("*/*") ;

e se precisar filtrar para exibir imagens adicione esta linha:

intent.setType("image/*");

Basta lançar sua intenção, tipo,

     Intent intent = new Intent("android.intent.action.GET_CONTENT");
    ((Intent)intent).addCategory("android.intent.category.OPENABLE");
    ((Intent)intent).setType("*/*");
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top