web-dev-qa-db-ja.com

インテントを処理するアクティビティが見つかりません-Android.intent.action.OPEN_DOCUMENT

Android 4.4のストレージアクセスフレームワークを試してみました

アクティビティの開始時にインテントを起動するダミーアプリを開発しました。

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

また、ファイルプロバイダーとして機能する別のダミーアプリを開発しました。

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

MyFileProviderクラスを実装しました。

しかし、ユーザーアプリ(インテントを起動するアプリ)を起動すると、次のエラーが発生します

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

私はAndroidの開発者向けドキュメントをフォローしていました。私が間違っているかもしれないアイデアはありますか?

編集:これが私の最新のマニフェストです。また、MyFileProvider「extendsDocumentsProvider」の「適切な」実装が必要ですか?今のところ、関数でnullを返すことはできますか?

17
yashdosi

Mimeタイプを追加するか、単にintent.setType("*/*")を追加します。

これは 既知の問題 のようです。 setType()が必要です。

編集:Android:enabled="true"も追加する必要があります。> = KitKatに対してのみ有効にするために、直接ではなく値から参照する必要があることに注意してください。したがって、Android:enabled="@bool/is_KitKat"<bool name="atLeastKitKat">false</bool>/res/values/、および<bool name="atLeastKitKat">true</bool>/res/values-v19/

28
hypd09

すべてのファイルを開くには、次の行を追加します。

intent.setType("*/*") ;

画像を表示するためにフィルタリングする必要がある場合は、次の行を追加します。

intent.setType("image/*");
4
Monir Khlaf

次のように、意図をキャストするだけです。

     Intent intent = new Intent("Android.intent.action.GET_CONTENT");
    ((Intent)intent).addCategory("Android.intent.category.OPENABLE");
    ((Intent)intent).setType("*/*");
1
Vijay Arun