Открытие pdf из активов
В настоящее время я пытаюсь использовать динамическую доставку для загрузки и установки некоторых файлов pdf и открытия их с помощью программы просмотра pdf barteksc (com.github.barteksc:android-pdf-viewer:2.8.2
).
Когда у меня были файлы pdf внутри моего apk, все работало нормально, но теперь, когда я загружаю их и устанавливаю с помощью динамической доставки, я получаю эту ошибку, когда пытаюсь их открыть
E/PDFView: ошибка загрузки pdf java.io.FileNotFoundException: Example.pdf в android.content.res.AssetManager.nativeOpenAsset(собственный метод) в android.content.res.AssetManager.open(AssetManager.java:744) на android.content.res.AssetManager.open(AssetManager.java:721) в com.github.barteksc.pdfviewer.util.FileUtils.fileFromAsset(FileUtils.java:37) в com.github.barteksc.pdfviewer.source.AssetSource.createDocument(AssetSource.java:39) в com.github.barteksc.pdfviewer.DecodingAsyncTask.doInBackground(DecodingAsyncTask.java:53) в com.github.barteksc.pdfviewer.DecodingAsyncTask.doInBackground(DecodingAsyncTask.java.java:25)$2.call(AsyncTask.java:333) на java.util.concurrent.FutureTask.run(FutureTask.java:266) на java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) в java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) в java.lang.Thread.run(Thread.java:764)
Это возвращает "Установлено"
if (manager.getInstalledModules().contains("dynamicfeature")) {
statusText.setText("Installed");
} else {
statusText.setText("Feature not yet installed");
}
Я устанавливаю модуль из другого класса, если это имеет значение, я видел кое-что об обновлении контекста в документах Google, но не мог этого понять.
Я также добавил
com.google.android.play.core.splitcompat.SplitCompatApplication
как говорится в документации, все равно не повезло.
Это метод, который я использую для просмотра файла Pdf. Он работал отлично, пока файлы PDF находились в папке ресурсов базового приложения, но теперь он не работает, поскольку файлы PDF находятся в папке ресурсов модуля динамической доставки.
private void displayFromAsset(String assetFileName) {
String SAMPLE_FILE = getIntent().getStringExtra("PDF INTENT");
pdfFileName = assetFileName;
pdfView.fromAsset(SAMPLE_FILE)
.defaultPage(pageNumber)
.enableSwipe(true)
.swipeHorizontal(false)
.onPageChange(this)
.enableAnnotationRendering(true)
.onLoad(this)
.scrollHandle(new DefaultScrollHandle(this))
.load();
1 ответ
Example.pdf не указывает на папку с активами.
вам необходимо указать относительный путь к вашему файлу. для папки с активами вы можете дать как
Uri resUri= Uri.fromFile(new File("//android_asset/image.png"));
Для загруженных файлов pdf вы можете запросить запрос поставщика контента и получить uri из результата запроса.