11

我想的是Android 4.4未找到可處理意向活動 - android.intent.action.OPEN_DOCUMENT

我的手放在存儲訪問架構我已經開發了一個虛擬應用程序,它觸發對活動開始的意圖。

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開發者文檔。任何想法我可能做錯了什麼?

編輯: 這是我最新的Manifest。 我也需要有一個「適當的」MyFileProvider「擴展DocumentsProvider」的實現?我現在可以在函數中返回null嗎?

+0

您的虛擬應用程序是否使用權限「android.permission.MANAGE_DOCUMENTS」? –

+0

@SherifelKhatib - 實際上它沒有這個權限。但我添加並檢查。仍然是同樣的錯誤。 – yashdosi

回答

8

添加一個MIME類型,或者簡單地intent.setType("*/*")

這似乎是一個known issue。需要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/

+0

它的工作!但仍然無法看到我的主機應用程序正在作爲提供程序工作。 – yashdosi

+0

仍然無法看到我的主機應用程序正在作爲提供者。 – yashdosi

+0

你可以發佈該應用程序的清單嗎? – hypd09

1

要打開所有文件中加入這一行:

intent.setType("*/*") ; 

,如果你需要過濾器來顯示圖像中加入這一行:

intent.setType("image/*"); 
0

剛投你的意圖, like,

 Intent intent = new Intent("android.intent.action.GET_CONTENT"); 
    ((Intent)intent).addCategory("android.intent.category.OPENABLE"); 
    ((Intent)intent).setType("*/*"); 
相關問題