根据从 Android Sharesheet 中选择的应用,将特定文本分享到另一个应用

Share specific text to another app based on chosen app from 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.createChooser() 创建的 Intent 中。 这个Intent extra,是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)

请注意,对于我们没有自定义文本的应用,我们仍然希望在 sendIntent 上设置 EXTRA_TEXT。 Android 将根据包名自动为正确的应用选择正确的数据。