2014-09-04 34 views
8

我的Android 4+应用程序可以创建PDF格式的不同报告。知道我想为用户提供通过邮件发送文件或在任何可以处理PDF文件的应用程序中打开的选项。目前我使用下面的代码:发送PDF文件作为邮件或提供应用程序直接查看文件

Intent intent = new Intent(Intent.ACTION_SEND); 
intent.setType("application/pdf"); 

Uri uri = Uri.parse("file://" + reportFile.getAbsolutePath()); 
intent.putExtra(Intent.EXTRA_STREAM, uri); 

try { 
    startActivity(Intent.createChooser(intent, "Share PDF file")); 
} catch (Exception e) { 
    Toast.makeText(ReportsActivity.this, "Error: Cannot open or share created PDF report.", Toast.LENGTH_SHORT).show(); 
} 

这workes很好,除了唯一的“发送”应用程序是offerd像蓝牙,谷歌驱动器,E-mail等我安装了Acrobat Reader软件应用程序,它当然可以查看PDF的文件。但是,这个应用程序也只列出了“发送签名”,而不是“在阅读器中打开”或类似这样的东西。

我认为ACTION_SEND意图将意味着“发送到其他应用程序”,而不是“轻松地发送到其他地方”。我可以使用什么意图来包含“打开”选项?

回答

13

我可以用什么意图来包含“open with”选项?

ACTION_VIEW用于查看文件。

startActivity(new Intent(Intent.ACTION_VIEW).setDataAndType(Uri.fromFile(reportFile), "application/pdf"))); 

我以为ACTION_SEND意图将意味着“发送到其他应用程序”,而不是striktly“送别处”。

不,ACTION_SEND是发送东西。这包括在某些情况下(例如发送到Google云端硬盘)“在另一个应用中发送给自己”,但它并不专门用于查看文件。

+0

非常感谢您的提示澄清。有什么办法可以将这两者结合起来让用户选择打开还是发送文件?当然,我使用第二个对话框先询问是否应提供发送选项或查看选项。但是,这将是用户的额外步骤。此外,在我知道是否有任何观看应用程序可用之前询问“打开或查看”会很糟糕...... – 2014-09-05 06:01:20

+0

@AndreiHerford:“有什么方法可以将这两个组合起来让用户选择打开还是发送文件? - 我不会推荐,因为这不是其他Android应用的典型特征。这就是说,你可以尝试[使用'EXTRA_INITIAL_INTENTS'](http://developer.android.com/reference/android/content/Intent.html#EXTRA_INITIAL_INTENTS)。 “当然,我使用第二个对话框来首先询问是否应该提供发送选项或视图选项。” - 恕我直言,每个应该有两个单独的UI触发器,两者都没有命名为“打开”。 “查看”和“分享”是适当的Android动词。 – CommonsWare 2014-09-05 10:32:56

+0

完美启动已安装的apv pdf阅读器以显示PDF文件。谢谢。 – Hong 2016-03-31 18:06:14