使用FileProvider Android从可移动SD卡打开文件时出错



我的目标是从任何内存中打开pdf文件。

我使用android模拟器与设备内存和可移动SD卡。

所以路径看起来像:

/storage/emulated/0/hts212.pdf-设备内存

/storage/1317-231C/LPS22HB.pdf-可移动SD卡

使用此代码打开文件(其中fileName是上面两个文件之一(:

File file = new File(fileName);
Intent target = new Intent(Intent.ACTION_VIEW);
Uri fileURI = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + ".provider", file);
target.setDataAndType(fileURI,"application/pdf");
target.setFlags(target.getFlags() | Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION );
Intent intent = Intent.createChooser(target, "Open File");
context.startActivity(intent);

AndroidManifest.xml

<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>

xml/provider_path

<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path name="external_files" path="."/>
</paths>

问题:

当我尝试从设备内存打开pdf文件(/storage/emulated/0/hts221.pdf(时,一切都很好。

但是,当我尝试从SD卡(/storage/1317-231C/LPS22HB.pdf(打开pdf文件时,应用程序崩溃

W System.err: java.lang.IllegalArgumentException: Failed to find configured root that contains /storage/1317-231C/LPS22HB.pdf
W System.err:   at android.support.v4.content.FileProvider$SimplePathStrategy.getUriForFile(FileProvider.java:711)
W System.err:   at android.support.v4.content.FileProvider.getUriForFile(FileProvider.java:400)

我在这里错过了什么?我想问题出在xml/provider_path中。

我使用Qt安卓系统,但我认为在这种情况下这并不是真正的问题。

添加

<root-path name="root" path="." />

到xml/provider_path。现在这两个文件都工作正常。

FileProvider无法提供来自可移动micro-sd卡的文件。

如果你想从可移动micro-sd卡提供文件,那么扩展ContentProvider就可以了。

很难相信根路径会解决这个问题,但我会很快检查。

更新:确实有效。在安卓11上,安卓/数据保持关闭。

伟大的发现!(我想我以前看过,但忘了。嗯……你知道,这里所有的问题和答案都是重复的。(。

相关内容

  • 没有找到相关文章

最新更新