在我的应用程序中,我的资产文件夹中存储了一些pdf文件。我看过用于打开pdf页面的库,但我认为Quickoffice之类的应用比我所见的库更能显示pdf。因此,我希望使用显示pdf
Intent.ACTION_VIEW
,如下所示:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(fileUri, "application/pdf");
getActivity().startActivity(intent);
但是,这是不可能的,因为不允许第三方应用访问我程序包中的文件。因此,我需要将文件复制到外部存储并将该文件提供给意图。
这使我想到了一个问题:我的pdf很大,因此我认为将它们存储两次(一次在我的Assets文件夹中,一次在外部存储器中)是愚蠢的。所以我想知道是否有解决方法。我可以例如这样做:
//Copy file to external storage
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(fileUri, "application/pdf");
getActivity().startActivity(intent);
//Delete file from external storage
这是一个好的解决方法,还是会导致pdf查看应用出现问题?还是有其他解决方法?
因此,我需要将文件复制到外部存储并将该文件提供给意图。
您也可以尝试从资产流式生成的myStreamProvider
(ContentProvider
基于Google的罐头)FileProvider
。
对于多个资产,这应该适用于StreamProvider
XML元数据:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<asset
name="whatevs"/>
</paths>
那应该将所有content://your.authority.name.goes.here/whatevs/*
Uri
值(针对的各种值*
)解析为中的文件assets/
。如果要将范围限制为assets/
(例如assets/goodstuff/
)的某些特定子目录,则可以使用:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<asset
name="whatevs"
path="goodstuff/"/>
</paths>
而且,如果这行不通,那就应该随便提出一个有关可复制测试用例的问题。
这是一个好的解决方法,还是会导致pdf查看应用出现问题?
startActivity()
是异步的,因此外部PDF查看器将永远无法以这种方式访问文件。
该文件位于我的资产文件夹下。因此,我正在设置WebViewClient并将我的页面加载到其中。但是我得到一个“网页不可用”的错误。 以下是我的活动代码: 和布局文件:
问题内容: 如何使用Java将所有文件从一个文件夹移动到另一文件夹?我正在使用此代码: 但它仅适用于一个特定文件。 谢谢!!! 问题答案: 如果对象指向文件夹,则可以遍历其内容
问题内容: 我正在尝试显示存储在我的Android应用程序资产文件夹中的“ NEFT.pdf”文件。 以下代码在API 25之前绝对可以正常工作 此代码不适用于API 25及更高版本。它给出了不再支持的错误 MODE_WORLD_READABLE 。 我将其更改为 MODE_PRIVATE, 但这给了我另一个错误 android.os.fileuriexposedException通过intent
问题内容: 如何为应用添加 PDF文件 ,您可以单击一个按钮查看该文件,完成后又回到原来的屏幕? 问题答案: 如果您只想查看PDF文件,则可以将其加载到UIWebView中。 斯威夫特4.1: 如果您想实现更多目标,最好使用PSPDFKit框架。
问题内容: 如果要优化PDF文件并减小文件大小,Ghostscript是最好的选择吗? 我需要存储大量PDF文件,因此我需要尽可能地优化和减小文件大小 是否有人对Ghostscript和/或其他有任何经验? 问题答案: 如果您正在寻找免费(如“自由”)软件,那么Ghostscript无疑是您的最佳选择。但是,它并不总是易于使用-它的某些(非常强大的)处理选项不容易找到文档。 看看这个答案,它解释了
任何反馈都很感激