我有一个关于android FileProvider的问题。 我想保存一个pdf文档并使用默认程序打开它。 我不想将它保存在外部存储器中。
在我成功将pdf保存到FilesDirectory / export / temp.pdf之后,
我曾尝试使用FileProvider.getUriForFile()生成URI。
File path = new File(getFilesDir(), "export");
File pdf = new File(path + File.separator + "temp.pdf");
pdf.getParentFile().mkdirs();
if (!pdf.exists())
pdf.createNewFile();
Uri uri = FileProvider.getUriForFile(getApplicationContext(), "?", pdf);
问题:我必须传递什么作为第二个参数“权限” - 我的文件的位置,可以授予URI权限的类或其他什么?无论我尝试过什么导致IllegalArgumentException或NullPointerException。 我的FileProvider(XML):
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.example.myApp.myActivity"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_path"/>
</provider>
引用文件:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<cache-path name="pdfTemplates" path="export/" />
</paths>
答案 0 :(得分:11)
我明白了。有两个不同的问题
CodeDiving回答了第一个问题。 我不得不从getUriForFile调用的provider-declaration中使用Authority。使用其他类导致NullPointerException。
我曾尝试从filesDirectory获取文件,但在我的file_path中,我只声明了缓存目录的路径。我将其更改为'files-path'并且它有效。此错误导致IllegalArgumentException。
答案 1 :(得分:8)
根据您的FileProvider文件(XML),第二个参数是com.example.myApp.myActivity
。那是
Uri uri = FileProvider.getUriForFile(getApplicationContext(),
"com.example.myApp.myActivity", pdf);