android getUriForFile 失败 external_files_path
android getUriForFile fails for external_files_path
* 新信息 *
单步进入 FileProvider 代码,我看到 external-files-path 实际上并不是植根于 /storage/emulated/0/,而是植根于 /storage/emulated/0/Android/data/com.perinote.perinote/files/。所以,我问一个问题,如何共享外部存储/DCIM 中的文件?
我正在将 "external" 文件传递给 Intent 并收到 "IllegalArgumentException: Failed to find configured root that contains ..." 错误。
不确定缺少什么。对 "cache" 文件执行类似的操作。
这是我的清单的供应商部分:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.perinote.image_access"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
"filepaths.xml" 文件:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-files-path
path="DCIM/Perinote/" name="images" /> <!-- must be same as ImageData.getPerinoteDirectory -->
</paths>
还有代码片段,其中 "file" 是相关文件名(不带路径):
Intent intent = new Intent (Intent.ACTION_SEND);
intent.setType ("plain/text");
intent.putExtra (Intent.EXTRA_EMAIL, new String[] {address});
intent.putExtra (Intent.EXTRA_SUBJECT, subject);
intent.putExtra (Intent.EXTRA_TEXT, body);
Uri uri = FileProvider.getUriForFile (getContext (), "com.perinote.image_access", file);
intent.putExtra (Intent.EXTRA_STREAM, uri);
intent.addFlags (Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags (Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
intent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult (intent, ACTIVITY_REQUEST_SEND_EMAIL);
getUriForFile() 失败。
当我在设备上使用文件管理器应用程序时,文件肯定存在,在 DCIM/Perinote/
下
例如,使用调试器,文件是"IMG_20171130_204015.jpg"。
在 Windows 上打开 explorer window 显示路径
This PC\Moto G (4)\Internal shared storage\DCIM\Perinote
文件出现在下面的列表中。
您应该先将 <external-files-path
更改为 <external-path.
。
* 新信息 * 单步进入 FileProvider 代码,我看到 external-files-path 实际上并不是植根于 /storage/emulated/0/,而是植根于 /storage/emulated/0/Android/data/com.perinote.perinote/files/。所以,我问一个问题,如何共享外部存储/DCIM 中的文件?
我正在将 "external" 文件传递给 Intent 并收到 "IllegalArgumentException: Failed to find configured root that contains ..." 错误。
不确定缺少什么。对 "cache" 文件执行类似的操作。
这是我的清单的供应商部分:
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.perinote.image_access"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
"filepaths.xml" 文件:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-files-path
path="DCIM/Perinote/" name="images" /> <!-- must be same as ImageData.getPerinoteDirectory -->
</paths>
还有代码片段,其中 "file" 是相关文件名(不带路径):
Intent intent = new Intent (Intent.ACTION_SEND);
intent.setType ("plain/text");
intent.putExtra (Intent.EXTRA_EMAIL, new String[] {address});
intent.putExtra (Intent.EXTRA_SUBJECT, subject);
intent.putExtra (Intent.EXTRA_TEXT, body);
Uri uri = FileProvider.getUriForFile (getContext (), "com.perinote.image_access", file);
intent.putExtra (Intent.EXTRA_STREAM, uri);
intent.addFlags (Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags (Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
intent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult (intent, ACTIVITY_REQUEST_SEND_EMAIL);
getUriForFile() 失败。
当我在设备上使用文件管理器应用程序时,文件肯定存在,在 DCIM/Perinote/
下例如,使用调试器,文件是"IMG_20171130_204015.jpg"。 在 Windows 上打开 explorer window 显示路径
This PC\Moto G (4)\Internal shared storage\DCIM\Perinote
文件出现在下面的列表中。
您应该先将 <external-files-path
更改为 <external-path.
。