Использование FileProvider для открытия PDF, включенного в мое приложение? - PullRequest
0 голосов
/ 31 мая 2019

Я включил два файла PDF, которые хочу открыть в своем приложении. Они должны открываться любым просмотрщиком PDF, установленным пользователем. Я поместил PDF-файлы в / res / raw. Я использовал этот код:

File file = new File(getContext().getFilesDir().getPath(), s);
            Uri pdfUri = FileProvider.getUriForFile(getContext(), getContext().getApplicationContext().getPackageName() + ".provider", file);
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(pdfUri, "application/pdf");
            intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

Мой filepaths.xml выглядит так:

<paths>
<files-path path="raw/" name="raw" />

Я получаю сообщение об ошибке:

java.lang.IllegalArgumentException: Failed to find configured root that contains /data/data/com.dsv2019.pvt15.prepapp/files/hjartlugnraddning.pdf

Почему это происходит?

1 Ответ

0 голосов
/ 31 мая 2019

У вас есть несколько проблем.

Сначала <files-path path="raw/" name="raw" /> говорит, что он обслуживает файлы из подкаталога raw/ в getFilesDir().Однако у new File(getContext().getFilesDir().getPath(), s) такого каталога не будет, если только он не находится в s, и ошибка предполагает, что его нет.Кстати, вы можете упростить это как new File(getContext().getFilesDir(), s).

Во-вторых, я думаю, что вы предполагаете существование каталога raw/ в getFilesDir().Если вы не создадите этот каталог, он не будет существовать.

В-третьих, я думаю, что вы думаете, что необработанные ресурсы - это файлы на устройстве.Они не.Это файлы на вашем компьютере разработчика.Это просто записи в файле APK на устройстве.

Итак, чтобы эта работа работала, вам нужно добавить код в:

  • Создать подкаталог raw/off getFilesDir()

  • Используйте openRawResource() для объекта Resources, чтобы скопировать ресурс в файл в этом недавно созданном подкаталоге raw/

  • Используйте этот File объект из предыдущего шага с FileProvider.getUriForFile()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...