【问题标题】:Opening pdf from assets从资产中打开 pdf
【发布时间】:2019-09-23 10:37:23
【问题描述】:

我目前正在尝试使用动态交付来下载和安装一些 pdf 文件,并使用 barteksc 的 pdf 查看器 (com.github.barteksc:android-pdf-viewer:2.8.2) 打开它们。

当我在我的 apk 中包含 pdf 文件时,一切正常,但现在我下载它们并通过动态交付安装它们,当我尝试打开它们时出现此错误

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:25) 在 android.os.AsyncTask$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();

【问题讨论】:

  • 你能抓取更多的日志吗?
  • 确认下载的 pdf 路径。这是未匹配的。
  • 用整个错误日志更新了我的问题。
  • 关于下载路径,我在 assets 文件夹中安装了一个带有 pdf 的动态交付模块,我不确定它应该如何工作,但我猜该模块与原始 APK 合并了?也许与我使用的库不兼容?

标签: java android dynamic-delivery


【解决方案1】:

Example.pdf 未指向资产文件夹。

您需要提供文件的相对路径。 对于资产文件夹,你可以给喜欢

Uri resUri= Uri.fromFile(new File("//android_asset/image.png"));

对于下载的pdf文件,您可以通过contentprovider查询并从查询结果中获取uri。

【讨论】:

  • 我已经用我用来查看 pdf 的实际方法更新了我的问题。这是 pdf 查看器库的基本方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-06
  • 2018-12-17
  • 2015-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-25
相关资源
最近更新 更多