【发布时间】:2021-01-07 08:38:31
【问题描述】:
我想知道是否可以让用户在不发送电子邮件的情况下打开他们选择的电子邮件应用程序。
val intent = Intent(Intent.ACTION_SEND)
intent.type = "plain/text"
startActivity(Intent.createChooser(intent, "Choose Email"))
这允许用户选择,但它会打开撰写。我只想打开电子邮件应用程序。
【问题讨论】:
我想知道是否可以让用户在不发送电子邮件的情况下打开他们选择的电子邮件应用程序。
val intent = Intent(Intent.ACTION_SEND)
intent.type = "plain/text"
startActivity(Intent.createChooser(intent, "Choose Email"))
这允许用户选择,但它会打开撰写。我只想打开电子邮件应用程序。
【问题讨论】:
这有点棘手,但并非不可能。
val resolveIntent = Intent(Intent.ACTION_SENDTO)
resolveIntent.setData(Uri.parse("mailto:default@recipient.com"))
val resolveInfoList = packageManager.queryIntentActivities(resolveIntent, PackageManager.MATCH_DEFAULT_ONLY)
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)
}
【讨论】:
ACTION_SENDTO 作为 MAIN/LAUNCHER Intent 的选择器会起作用。
SEND_TO 仅用于解析包,启动意图为packageManager.getLaunchIntentForPackage