首页 > 解决方案 > 如何组合 ACTION_SEND 和 ACTION_VIEW 意图类型?

问题描述

我想从我的应用程序共享一个 URI,并让应用程序选择器对话框显示 ACTION_SEND 应用程序(如 SMS 和复制到剪贴板)以及 ACTION_VIEW 应用程序(如 Chrome)的选项。到目前为止,我似乎一次只能显示一组应用程序。有没有办法结合意图动作?

这是简单的 ACTION_SEND 意图的样子:

Intent i = new Intent();
i.setAction(Intent.ACTION_SEND);
i.setType("text/plain");
i.putExtra(Intent.EXTRA_TEXT, "www.example.com");
context.startActivity(Intent.createChooser(i, "Share"));

这导致发送信息的应用程序的正常选择器。但没有在浏览器选项中打开。

ACTION_VIEW 意图如下所示:

Intent i = new Intent();
i.setAction(Intent.ACTION_VIEW);
i.putData(Uri.parse("www.example.com"))
context.startActivity(Intent.createChooser(i, "Share"));

这导致在浏览器中打开链接的正常选择器。但是没有信息发送应用程序的选项。

有没有办法“组合”这两种行为,以便两组选项都显示在选择器对话框中?

我也尝试将类别添加到意图中,但没有运气。

编辑:我偶然发现了这个问题,其中 OP 有同样的问题。但是,我想要一个不涉及为我想在选择器中显示的每个应用程序创建一堆自定义活动的解决方案。

标签: androidandroid-intentandroid-app-links

解决方案


我知道这已经晚了,但有一个不同的解决方案:为发送和查看创建意图。为其中一个创建选择器意图,并将另一个意图作为 Intent.EXTRA_INITIAL_INTENTS 传递。像这样:

// Share
val sendIntent = Intent(Intent.ACTION_SEND)
sendIntent.setDataAndType(uri, MIME_PDF_TYPE)
sendIntent.putExtra(Intent.EXTRA_TEXT, "TEST")
sendIntent.putExtra(Intent.EXTRA_STREA, uri)
    
// Open
val openIntent = Intent(Intent.ACTION_VIEW)
openIntent.setDataAndType(uri, MIME_PDF_TYPE)
openIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
    
    
val chooserIntent = Intent.createChooser(sendIntent,activity.getString(R.string.sharing_title))
    
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, arrayOf(openIntent))
    
activity.startActivity(chooserIntent)

推荐阅读