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