android - 根据从 Android Sharesheet 中选择的应用程序将特定文本共享到另一个应用程序
问题描述
我想分享我的应用程序中的图像并根据用户选择的应用程序自定义标题。
下面的代码运行良好,但无论用户选择哪个应用程序,文本始终相同。
val sendIntent: Intent = Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_TEXT, "This is my text to send.")
putExtra(Intent.EXTRA_STREAM, uriToImage)
type = "image/png"
}
val shareIntent = Intent.createChooser(sendIntent, null)
startActivity(shareIntent)
如何根据所选应用自定义文本?
解决方案
您可以通过将EXTRA_REPLACEMENT_EXTRAS添加到Intent
created by来根据用户选择的应用程序自定义共享数据,而不仅仅是文本Intent.createChooser()
。这个Intent
额外的,是您要共享的自定义数据Bundle
的应用程序包名称Bundle
,例如EXTRA_TEXT
,EXTRA_STREAM
等。
例如:
val sendIntent: Intent = Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_TEXT, "This is my text to send.") // Default text
putExtra(Intent.EXTRA_STREAM, uriToImage)
type = "image/png"
}
val shareIntent = Intent.createChooser(sendIntent, null)
shareIntent.putExtra( // Important to add the extra to the Chooser Intent, not `sendIntent`!
Intent.EXTRA_REPLACEMENT_EXTRAS, bundleOf(
"com.twitter.android" to bundleOf( // Twitter specific text
Intent.EXTRA_TEXT to "Hello Twitter!")
"another.app.com" to bundleOf( // Another app specific text
Intent.EXTRA_TEXT to "Hello another app!")
)
)
startActivity(shareIntent)
请注意,对于我们没有自定义文本的应用程序,我们仍然希望EXTRA_TEXT
在sendIntent
. Android 将根据其包名称自动为正确的应用选择正确的数据。
推荐阅读
- tsql - 我有一个要求,我需要在 Azure SQL DW 中将列值动态转换为列标题
- python - 遵循 python googl-style-guide 时避免使用静态成员和方法
- python-3.x - 在 CPLEX 上实施软规则
- linux - Ubuntu / NGINX - 无法更改某些目录和文件的所有权或权限
- swift - 将数据从蓝牙设备转换为可读字符串
- python - 比较具有相同形状但沿轴移动的两条曲线
- java - JVM 搜索 install4j 应用程序的回退
- ssl - 将 Http 更改为 Https 用于 c# Web 应用程序
- media-player - UNO 中对 Web Assembly 的媒体播放器支持
- angular - 如何从当前日期开始添加 1 小时的条件