2017-02-03 66 views
1

目前,FileProvider getUriForFile方法生成拋出:IllegalArgumentException當文件上的外部SD的Android - FileProvider getUriForFile當文件上的外部SD

當該文件是在設備存儲器(下/存儲/模擬/ 0 ),它工作正常。

Uri videoUri = FileProvider.getUriForFile(this, 
      getApplicationContext().getPackageName() + ".provider", 
      new File(videoPath)); 

這裏將videoPath有以下值:

videoPath = /storage/extSdCard/Android/data/com.podcastcutter.debug/files/episodeMp3/TEDTalks (video)/Why you should love statistics - Alan Smith.mp4 

我的清單文件包含:

 <provider 
     android:name="android.support.v4.content.FileProvider" 
     android:authorities="${applicationId}.provider" 
     android:exported="false" 
     android:grantUriPermissions="true"> 
     <meta-data 
      android:name="android.support.FILE_PROVIDER_PATHS" 
      android:resource="@xml/provider_paths"/> 
    </provider> 

這裏的provider_paths:

<external-path name="external_files" path="."/> 

我如何修改FileProvider配置ñ解決這個問題?

在此先感謝。

異常生成:

java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/extSdCard/Android/data/com.podcastcutter.debug/files/episodeMp3/TEDTalks (video)/Why you should love statistics - Alan Smith.mp4 
android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:711)     
android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:400) 

其他配置信息:

compileSdkVersion 25 

buildToolsVersion "23.0.3" 

minSdkVersion 16 

targetSdkVersion 25 

support libraries version : 25.1.1 
+0

您更好的擴展ContentProvider類。然後,您可以提供來自每個存儲位置的文件。更靈活。 – greenapps

回答

2

我如何修改FileProvider配置來解決這個問題?

你不行。 FileProvider不支持可移動存儲。

+0

明白了。我最終實現了我自己的視頻活動。 – u2gilles

0

你提供的路徑是錯誤的類型。您的videoPath顯示應用外部存儲的路徑,但您的提供商路徑使用external-path,該鏈接指向設備根外部存儲。 (/storage/emulated/0

更改提供商路徑是<external-files-path>...</external-files-path>

+0

請問您是否更清楚。我應該添加什麼路徑? – u2gilles

6

我在的provider.xml加入這一行,並工作正常,從SD卡獲取文件URI:

<root-path name="external_files" path="/storage/" />

完整的XML文件:

<?xml version="1.0" encoding="utf-8"?> 
<paths> 
    <external-path 
     name="external_files" 
     path="." /> 
    <root-path 
     name="external_files" 
     path="/storage/" /> 
</paths> 
相關問題