لم يتم العثور على أي نشاط للتعامل مع النية - 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 "extends DocumentsProvider"؟هل يمكنني فقط إرجاع قيمة فارغة في الوظائف في الوقت الحالي؟
المحلول
أضف نوع التمثيل الصامت، أو ببساطة 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/
نصائح أخرى
لفتح جميع الملفات إضافة هذا السطر:
giveacodicetagpre.وإذا كنت بحاجة إلى تصفية لعرض الصور إضافة هذا الخط:
giveacodicetagpre.يلقي فقط نيتك، مثل،
giveacodicetagpre.