【问题标题】:Possible to create an intent to show mail app options in android?可以创建在 android 中显示邮件应用程序选项的意图吗?
【发布时间】:2021-01-07 08:38:31
【问题描述】:

我想知道是否可以让用户在不发送电子邮件的情况下打开他们选择的电子邮件应用程序。

val intent = Intent(Intent.ACTION_SEND)
intent.type = "plain/text"
startActivity(Intent.createChooser(intent, "Choose Email"))

这允许用户选择,但它会打开撰写。我只想打开电子邮件应用程序。

【问题讨论】:

  • 检查thisthis
  • 请注意,plain/text 不是有效的 MIME 类型。你可能想要text/plain

标签: android kotlin


【解决方案1】:

这有点棘手,但并非不可能。

  1. 查找所有电子邮件客户端
val resolveIntent = Intent(Intent.ACTION_SENDTO)
resolveIntent.setData(Uri.parse("mailto:default@recipient.com"))
val resolveInfoList = packageManager.queryIntentActivities(resolveIntent, PackageManager.MATCH_DEFAULT_ONLY)
  1. 启动电子邮件客户端
val intents = resolveInfoList.mapNotNull { info -> packageManager.getLaunchIntentForPackage(info.activityInfo.packageName) }.toMutableList()
if(intents.isEmpty()) {
    //no mail client installed. Prompt user or throw exception
} else if(intents.size == 1) {
    //one mail client installed, start that
    startActivity(intents.first())
} else {
    //multiple mail clients installed, let user choose which one to start
    val chooser = Intent(Intent.ACTION_CHOOSER)
    chooser.putExtra(Intent.EXTRA_INTENT, intents.removeAt(0))
    chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, intents.toTypedArray())
    chooser.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    startActivity(chooser)
}

【讨论】:

  • 这似乎正是 OP 不想要的。我希望这会打开电子邮件撰写屏幕。 OP 似乎想要打开其他东西,大概是启动器活动是什么。使用 ACTION_SENDTO 作为 MAIN/LAUNCHER Intent 的选择器会起作用。
  • @CommonsWare 再次检查-SEND_TO 仅用于解析包,启动意图为packageManager.getLaunchIntentForPackage
  • @F43nd1r 有效,我正在寻找什么。但是,我在 Android API 30 上尝试过,它在那里不起作用,但它适用于
猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 2012-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多