15

我有一个关于 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。我的文件提供者(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>
4

2 回答 2

11

我懂了。有两个不同的问题

  1. CodeDiving 回答了第一个问题。对于 getUriForFile 调用,我必须使用提供者声明中的授权。使用其他类导致 NullPointerException。

  2. 我试图从 filesDirectory 获取文件,但在我的 file_path 中我只声明了缓存目录的路径。我将其更改为“文件路径”并且它有效。此错误导致 IllegalArgumentException。

于 2013-12-05T08:04:57.883 回答
9

根据您的 FileProvider 文件(XML),第二个参数是com.example.myApp.myActivity. 那是

Uri uri = FileProvider.getUriForFile(getApplicationContext(),
                                     "com.example.myApp.myActivity", pdf);
于 2013-12-02T13:46:22.427 回答