android - 如何组合 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 有同样的问题。但是,我想要一个不涉及为我想在选择器中显示的每个应用程序创建一堆自定义活动的解决方案。
解决方案
我知道这已经晚了,但有一个不同的解决方案:为发送和查看创建意图。为其中一个创建选择器意图,并将另一个意图作为 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)
推荐阅读
- android - 为什么按“返回”按钮后不调用 onSaveInstanceState()?
- css - 有没有办法进行幻灯片转换,使元素低于边框?
- html - 在 HTML 表格中输入信息
- three.js - AFrame - 片段着色器中的 sampler3D
- sql - 如何在 JOIN 之前使用 WHERE 子句过滤行?
- search - MarkLogic - 通配符搜索不返回结果
- php - 如何访问json数组
- javascript - 如何为随机 HTML 设置暗模式?
- python - 如何使用 Scapy 发送 SMB 数据包?
- react-native - 如何在不签名的情况下生成 apk