我想从我的Android应用程序中打开一些pdf.我正在使用Intent来做到这一点:
Intent intent = new Intent();
intent.setDataAndType(Uri.parse(url), "application/pdf");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
这段代码适用于某些pdf,但是当我尝试打开其他代码时它失败了.
这是Android向我展示的消息:
该文件存在问题.
我必须提到正在打开的没有问题的pdf是使用一个Crystal Report模板创建的,而失败的pdf是使用另一个创建的.
相反,如果我打开我的浏览器(在我的计算机上)失败的pdf的URL,它不会给我任何打开它们的错误所以我想这可能是Android上有一些限制,不同于某些pdf到另一个(在Crystal Report模板上),但我看不到它.
在Android上打开pdf文件有什么限制?(大小,Crystal Report的一些参数,不允许等等)
我已经放弃它可能是一个大小限制,因为提供问题的pdf文件小于没有给出任何错误的文件.
证明我做了:
编辑
我注意到我正在使用http://协议,但PDF是在https://协议上,所以我在Uri.parse方法上改变了它.
当我进行此更改时,应用程序崩溃并在日志中显示错误:
android.content.ActivityNotFoundException:找不到处理Intent的Activity
此外,我已经注意到,没有给我任何错误的PDF,在http://协议的URL中,而不是https://所以我想该https://协议可能是问题.
我只能http://在意图上打开请求吗?
小智 10
可能是Android PDF查看器应用程序无法解释该文件.您是否尝试将完全相同的文件复制/下载到Android手机并从那里打开?
另外,我建议使用IntentChooser启动PDF查看器,只是为了在没有安装PDF查看器的情况下安全播放/给用户选择应用程序选项:
Intent intent = new Intent();
intent.setDataAndType(Uri.parse(url), "application/pdf");
Intent chooserIntent = Intent.createChooser(intent, "Open Report");
startActivity(chooserIntent);
Run Code Online (Sandbox Code Playgroud)
我找到了一种解决方法,可以在我的Android应用程序上查看我的PDF(但不允许我在应用程序上显示后下载它).如果我使用Google Docs打开PDF,我可以使用我的Intent打开它.
这是我在我的网址之前添加的内容:
https://docs.google.com/gview?embedded=true&url=
Run Code Online (Sandbox Code Playgroud)
所以最后的网址将是:
https://docs.google.com/gview?embedded=true&url=https://myUrl.pdf
Run Code Online (Sandbox Code Playgroud)
这是我现在使用的整个代码:
String url= "https://docs.google.com/gview?embedded=true&url=https://url.pdf";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
但它仍然不够,因为我想打开它而不需要使用第三方应用程序.此外,使用Google Docs打开PDF速度很慢,我必须等待太多,直到最终打开PDF.
如果有人知道如何用原生Android打开它,请告诉我.
如果我不使用Google文档打开它会怎样?
使用相同的代码,但只使用我的网址,而不是添加的Google文档网址,Android让我在两个应用程序之间进行选择:Adobe Acrobat Reader和Google Chrome.
如果我使用谷歌浏览器打开它,它会下载PDF但不会自动打开.
如果我用Adobe Acrobat Reader打开它,它会给我以下错误:
PDF无法显示(无法打开)