Android中Intent习惯用法

2019-12-10 19:42:07于丽

需要注意的是,在执行了startActivity(intent)之后,虽然短信应用启动了,但是短信没有直接发出去,需要我们再点击一下发送消息才可以。

发送邮件

发送邮件的时候,我们要使用的action也是Intent.ACTION_SENDTO,并且要指定其URI是mailto:协议,这样能保证是邮件应用接收并处理我们的intent对象,而不是其他应用接收,从而准确实现发送邮件的目的。如果我们的action不是Intent.ACTION_SENDTO,而是Intent.ACTION_SEND,且没有指定mailto:协议的URI的话,那么Android在接收到intent对象之后不会直接邮件应用,而是弹出了App Chooser,让我们选择要启动哪个应用,比如短信、QQ等等,所以为了确保直接启动邮件应用,我们应该使用Intent.ACTION_SENDTO并且指定mailto:协议的URI。

示例代码如下:

//使用ACTION_SENDTO而不是ACTION_SEND
Intent intent = new Intent(Intent.ACTION_SENDTO);
//指定URI使用mailto:协议,确保只有邮件应用能接收到此intent对象
Uri uri = Uri.parse("mailto:");
intent.setData(uri);
String[] addresses = {"zhangsan@126.com", "lisi@126.com"};
String[] cc = {"boss@126.com"};
String[] bcc = {"girlfriend@126.com"};
String subject = "加班";
String content = "国庆正常上班~~";
//设置邮件的接收方
intent.putExtra(Intent.EXTRA_EMAIL, addresses);
//设置邮件的抄送方
intent.putExtra(Intent.EXTRA_CC, cc);
//设置邮件的密送方
intent.putExtra(Intent.EXTRA_BCC, bcc);
//设置邮件标题
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
//设置邮件内容
intent.putExtra(Intent.EXTRA_TEXT, content);
//设置邮件附件
//intent.putExtra(Intent.EXTRA_STREAM, Uri.parse(...));
ComponentName componentName = intent.resolveActivity(getPackageManager());
if(componentName != null){
 startActivity(intent);
}

启动邮件应用后的截图如下所示: 

Android中Intent习惯用法

我们分别通过key为Intent.EXTRA_EMAIL、Intent.EXTRA_CC和Intent.EXTRA_BCC的extra依次设置邮件的接收方、抄送方、密送方,其值均为String数组。我们通过key为Intent.EXTRA_SUBJECT的extra设置邮件标题,通过key为Intent.EXTRA_TEXT的extra设置邮件内容。如果想发送附件,那么可以将附件封装成Uri的形式,然后通过key为Intent.EXTRA_STREAM的extra设置邮件附件。