Android Fileprovider:IllegalArgumentException:无法找到包含的已配置根目录

时间:2013-11-28 10:24:00

标签: pdf authority android-fileprovider

我有一个关于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>

2 个答案:

答案 0 :(得分:11)

我明白了。有两个不同的问题

  1. CodeDiving回答了第一个问题。 我不得不从getUriForFile调用的provider-declaration中使用Authority。使用其他类导致NullPointerException。

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

答案 1 :(得分:8)

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

Uri uri = FileProvider.getUriForFile(getApplicationContext(),
                                     "com.example.myApp.myActivity", pdf);