Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/html");
intent.putExtra(Intent.EXTRA_EMAIL, "emailaddress@emailaddress.com");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "I'm email body.");
startActivity(Intent.createChooser(intent, "Send Email"));
Run Code Online (Sandbox Code Playgroud)
上面的代码打开一个对话框,显示以下应用程序: - 蓝牙,Google Docs,Yahoo Mail,Gmail,Orkut,Skype等.
实际上,我想过滤这些列表选项.我想只显示与电子邮件相关的应用程序,例如Gmail,Yahoo Mail.怎么做?
我在"Android Market"应用程序上看到了这样的例子.
该对话框仅显示电子邮件应用程序,例如Gmail,Yahoo Mail等.它不显示蓝牙,Orkut等.什么代码产生这样的对话?
我想设置我的应用程序的一部分,允许用户向另一个用户发送快速电子邮件.设置它并不是很难:
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_TEXT, message);
Intent mailer = Intent.createChooser(intent, null);
startActivity(mailer);
Run Code Online (Sandbox Code Playgroud)
然而,问题在于ACTION_SEND不仅仅被电子邮件程序所接受 - 例如,在我的手机上,Facebook应用程序,Twitter,reddit很有趣,甚至蓝牙也可以作为发送此消息的可行替代方案.对于其中一些(特别是Twitter)来说,这个消息太长了.
有没有办法将选择器限制为只支持长消息(如电子邮件)的应用程序?或者有没有办法检测用户选择的应用程序并适当调整消息?
查看intent.resolveActivity != null 但启动 Intent 会引发 ActivityNotFound 异常,我在打开浏览器或具有深度链接的应用程序时写道:
private fun openUrl(url: String) {
val intent = Intent().apply {
action = Intent.ACTION_VIEW
data = Uri.parse(url)
// setDataAndType(Uri.parse(url), "text/html")
// component = ComponentName("com.android.browser", "com.android.browser.BrowserActivity")
// flags = Intent.FLAG_ACTIVITY_CLEAR_TOP + Intent.FLAG_GRANT_READ_URI_PERMISSION
}
val activityInfo = intent.resolveActivityInfo(packageManager, intent.flags)
if (activityInfo?.exported == true) {
startActivity(intent)
} else {
Toast.makeText(
this,
"No application can handle the link",
Toast.LENGTH_SHORT
).show()
}
}
Run Code Online (Sandbox Code Playgroud)
它不起作用。在 API 30 模拟器中找不到浏览器,而一个常见的解决方案有效:
private fun openUrl(url: String) {
val intent …Run Code Online (Sandbox Code Playgroud) android android-manifest android-intent activitynotfoundexception android-11
我试图在Android上发送2.1的电子邮件,我有两个问题.
1)首先,To to field不填充
2)类型消息/ rfc822创建一个错误:"没有应用程序可以执行此操作"
Intent msg = new Intent(Intent.ACTION_SEND);
//Two types, rfc822 doesnt seem to work in the emulator
msg.setType("text/plain");
//msg.setType("message/rfc822");
//To:
msg.putExtra(Intent.EXTRA_EMAIL, mEmailAddress);
//Body:
//msg.putExtra(Intent.EXTRA_TEXT, "");
//Subject
//msg.putExtra(Intent.EXTRA_SUBJECT, "");
mActivity.startActivity(Intent.createChooser(msg, "chooser title"));
Run Code Online (Sandbox Code Playgroud)
我在模拟器中运行此代码示例
谢谢马克