Android Fileprovider: IllegalArgumentException: Не удалось найти настроенный корень, содержащий

У меня есть вопрос об андроиде FileProvider. Я хочу сохранить PDF-документ и открыть его с помощью программы по умолчанию. Я не хочу сохранять его во внешнем хранилище.

После того, как я успешно сохранил pdf файл в FilesDirectory/export/temp.pdf,
Я пытался создать URI с помощью 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);

Вопрос: Что мне нужно передать в качестве второго параметра "Власть" - расположение моих файлов, класс, который может предоставить 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>

Ответы

Ответ 1

У меня это получилось. Были две разные проблемы.

  • На первый выпуск ответил CodeDiving. Я должен был использовать Власть из объявления-провайдера для вызова getUriForFile. Использование другого класса вызвало исключение NullPointerException.

  • Я пытался получить файл из filesDirectory, но в моем пути file_path я объявил только путь к кешу Directory. Я изменил его на "путь к файлам", и он сработал. Эта ошибка вызвала исключение IllegalArgumentException.

Ответ 2

В соответствии с файлом FileProvider (XML) второй параметр com.example.myApp.myActivity. Это

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