Hum*_*mus 16 android filepath illegalargumentexception android-fileprovider
我一直在尝试按照Android教程共享文件.我这样设置FileProvider
:
在主清单xml上:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.mysecondapp.fileprovider"
android:exported="false"
android:grantUriPermissions="true" >
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
Run Code Online (Sandbox Code Playgroud)
res/xml/filpaths.xml文件:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="myexternalimages" path="SpCars_album/" />
</paths>
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我尝试以下方法:
File requestFile = new File(mImageFilenames[position]);
try {
fileUri = FileProvider.getUriForFile(
SeventhActivity.this,
"com.example.mysecondapp.fileprovider",
requestFile);
} catch (IllegalArgumentException e) {
Log.e("File Selector",
"The selected file can't be shared: " +
mImageFilenames[position]);
}
Run Code Online (Sandbox Code Playgroud)
requestFile使用适当的文件工作路径进行实例化.该文件的路径完全以getExternalFilesDir(Environment.DIRECTORY_PICTURES)
返回的内容开始.我只是无法理解是什么引起了错误,因为一切似乎都适合.提前致谢.
Com*_*are 23
该文件的路径完全以getExternalFilesDir(Environment.DIRECTORY_PICTURES)返回的内容开始.
AFAIK,它不会给你一个名为的目录SpCars_album/
.
我只是无法理解是什么引起了错误,因为一切似乎都适合.
您提供的文件不是FileProvider
可由您定义的根提供的文件.
UPDATE
我忘了这与文档错误有关FileProvider
.FileProvider
并<external-path>
没有不为来自文件getExternalFilesDir()
,而是从Environment.getExternalStorageDirectory()
.我创建了一个StreamProvider
支持的子类getExternalFilesDir()
.
如果你使用我的StreamProvider
,替换你<external-path>
的<external-files-path name="myexternalimages" path="Pictures/SpCars_album/" />
,你应该有更好的运气.
现在这是一个老问题,但我刚遇到了类似的问题.
我找到的一个懒惰的解决方案就是使用:
<external-path name="myexternalimages" path="Android/" />
Run Code Online (Sandbox Code Playgroud)
因为getExternalStorageDirectory返回"/ storage/emulated/0 /",所以共享/ Android(下一级别)将允许访问应用程序中的任何文件.
或者,如果您想更精确,可以这样做:
<external-path name="myexternalimages" path="Android/data/YOUR_BUNDLE_ID/files/SpCars_album" />
Run Code Online (Sandbox Code Playgroud)
这感觉不太对劲,但似乎确实有效!