首页 > 解决方案 > 根据从 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)

如何根据所选应用自定义文本?

标签: androidandroid-intentandroid-sharing

解决方案


您可以通过将EXTRA_REPLACEMENT_EXTRAS添加到Intentcreated by来根据用户选择的应用程序自定义共享数据,而不仅仅是文本Intent.createChooser()。这个Intent额外的,是您要共享的自定义数据Bundle的应用程序包名称Bundle,例如EXTRA_TEXTEXTRA_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_TEXTsendIntent. Android 将根据其包名称自动为正确的应用选择正确的数据。


推荐阅读