文件提供程序:找不到包含的已配置根目录
File Provider: Failed to find configured root that contains
我正在使用 FileProvider 通过以下代码将媒体共享给其他应用程序:
Intent shareIntentt = new Intent(Intent.ACTION_SEND);
shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri contentUri = Fileprovider.getUriForFile(context, "com.app.tst", csOrignalFile);
startActivity(Intent.createChooser(shareIntentt, getResources().getText(R.string.share)));
这是清单中 <application>
标签下的我的供应商:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.app.tst"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
这是 file_paths.xml :
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-files-path name="external_files" path="/"/>
</paths>
文件位置是
data/user/0/com.app.tst/app_Media/User/2b5b73e511c0f40d07303487b9b43a7c4fe92516/df1c010261115ccba4b6ae484aff79714cb23fd5.jpg
我尝试了 SO 的多个答案并更改了 path="/" 有几个变体,例如 ,
但是每次我都会遇到同样的错误。
Process: com.app.tst, PID: 8261
java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/com.app.tst/app_Media/User/2b5b73e511c0f40d07303487b9b43a7c4fe92516/df1c010261115ccba4b6ae484aff79714cb23fd5.jpg
at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:712)
注:我还没有自己写任何FileProvider。
尝试
<?xml version="1.0" encoding="utf-8"?>
<paths >
<external-path
name="share" path="/"/>
</paths>
而不是external-files-path
编辑:-
而且你还没有完成 shareIntent.setData(contentUri);
请也设置数据.. :)
设置 path="" 而不是 path="/"
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-files-path name="external_files" path=""/>
</paths>
<external-files-path name="external_files" path="/"/>
改为
<files-path name="myfiles" path="."/>
和
data/user/0/com.app.tst/app_Media/User/2b5.....
改为
/data/user/0/com.app.tst/files/app_Media/User/2b5b73e51.....
我正在使用 FileProvider 通过以下代码将媒体共享给其他应用程序:
Intent shareIntentt = new Intent(Intent.ACTION_SEND);
shareIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Uri contentUri = Fileprovider.getUriForFile(context, "com.app.tst", csOrignalFile);
startActivity(Intent.createChooser(shareIntentt, getResources().getText(R.string.share)));
这是清单中 <application>
标签下的我的供应商:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.app.tst"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
这是 file_paths.xml :
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-files-path name="external_files" path="/"/>
</paths>
文件位置是
data/user/0/com.app.tst/app_Media/User/2b5b73e511c0f40d07303487b9b43a7c4fe92516/df1c010261115ccba4b6ae484aff79714cb23fd5.jpg
我尝试了 SO 的多个答案并更改了 path="/" 有几个变体,例如
Process: com.app.tst, PID: 8261 java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/com.app.tst/app_Media/User/2b5b73e511c0f40d07303487b9b43a7c4fe92516/df1c010261115ccba4b6ae484aff79714cb23fd5.jpg at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:712)
注:我还没有自己写任何FileProvider。
尝试
<?xml version="1.0" encoding="utf-8"?>
<paths >
<external-path
name="share" path="/"/>
</paths>
而不是external-files-path
编辑:-
而且你还没有完成 shareIntent.setData(contentUri);
请也设置数据.. :)
设置 path="" 而不是 path="/"
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-files-path name="external_files" path=""/>
</paths>
<external-files-path name="external_files" path="/"/>
改为
<files-path name="myfiles" path="."/>
和
data/user/0/com.app.tst/app_Media/User/2b5.....
改为
/data/user/0/com.app.tst/files/app_Media/User/2b5b73e51.....