从资产打开pdf

时间:2019-09-23 10:37:23

标签: java android dynamic-delivery

我目前正在尝试使用动态交付方式下载并安装一些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文件的方法。当pdfs位于基本应用程序的资产文件夹中时,它可以正常工作,但是由于pdfs位于动态交付模块的assets文件夹中,因此它无法正常工作

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 个答案:

答案 0 :(得分:0)

Example.pdf没有指向资产文件夹。

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

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

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