Android Fileprovider: IllegalArgumentException: Fa

2019-03-24 16:28发布

问题:

I have a question about the android FileProvider. I want to save a pdf document and open it with a default program. I don´t want to save it in external Storage.

After I´ve successfully saved the pdf to the FilesDirectory/export/temp.pdf,
I´ve tried to generate an URI by using FileProvider.getUriForFile().

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

Question: What do I have to pass as the second parameter "Authority" - the location of my Files, the class which can grant the URI-Permissions or something other? Whatever I´ve tried leaded to an IllegalArgumentException or a NullPointerException. My 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>

referenced File:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <cache-path name="pdfTemplates" path="export/" />
</paths>

回答1:

I´ve got it. There were two different Problems

  1. The first Issue was answered by CodeDiving. I had to use the Authority from the provider-declaration for the getUriForFile call. Using an other class caused the NullPointerException.

  2. I´ve tried to get a file from filesDirectory, but in my file_path I declared only a path to cache Directory. I changed it to 'files-path' and it worked. This error caused the IllegalArgumentException.



回答2:

According to your FileProvider file(XML), the second parameter is com.example.myApp.myActivity. That is

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