Android中常见Intent习惯用法

Android中的Intent是一个非常重要的类,如果对Intent不是特别了解,可以参见博文《Android中Intent概述及使用》。如果对Intent Filter不是特别了解,可以参见博文《Android中Intent对象与Intent Filter过滤匹配过程详解》。

本文着重讲一下Android中一些常见的Intent的习惯用法,比如如何通过Intent发送短信、发送邮件、启动摄像机拍照录视频、设置闹铃、打开WIFI设置界面等等。

限于篇幅,本博文分为上下两篇,这是上篇。

发送短信

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

示例代码如下:

//使用ACTION_SENDTO而不是ACTION_SENDIntent intent = new Intent(Intent.ACTION_SENDTO);//指定URI使用smsto:协议,协议后面是接收短信的对象Uri uri = Uri.parse(“smsto:10086”);intent.setData(uri);//设置消息体intent.putExtra(“sms_body”, “手头有点紧,借点钱吧~~”);ComponentName componentName = intent.resolveActivity(getPackageManager());if(componentName != null){startActivity(intent);}

在构造发送短信的URI时,前面是smsto:协议,后面跟的是接收短信的对方的手机号。如果在构建URI时,只写了smsto:,而没有写后面的手机的号的话,那么该intent也可以成功启动短信应用,不过这种情形下,在启动了短信应用之后,还需要我们自己再手动输入接收信息的手机号。我们通过key为sms_body的extra设置短信的内容。

需要注意的是,在执行了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_SENDIntent 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);}

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

我们分别通过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设置邮件附件。

需要注意的是,在执行了startActivity(intent)之后,虽然邮件应用启动打开了,但是邮件没有直接发出去,需要我们再点击一下右上角的发送按钮才能将邮件发出去。

打电话

要想通过Intent打电话,我们有两个可以使用的action:Intent.ACTION_DIAL和Intent.ACTION_CALL,二者有一定的区别。

如果使用Intent.ACTION_DIAL作为intent对象的action,那么当执行startActivity(intent)之后,会启动打电话应用,并且会自动输入指定的手机号,但是不会自动拨打,需要我们手动按下拨打按钮才能真正给对方打电话。

如果使用Intent.ACTION_CALL作为intent对象的action,那么当执行startActivity(intent)之后,会启动打电话应用,并且直接拨打我们指定的手机号,无需我们再手动按下拨打按钮。但是需要注意的是,该action需要权限android.permission.CALL_PHONE,如果在应用的AndroidManifest.xml文件中没有添加该权限,那么当指定到startActivity(intent)这句代码的时候,就会抛出异常,应用崩溃退出。

以下是示例代码:

//Intent.ACTION_DIAL只拨号,不打电话//Intent intent = new Intent(Intent.ACTION_DIAL);//Intent.ACTION_CALL直接拨打指定电话,需要android.permission.CALL_PHONE权限Intent intent = new Intent(Intent.ACTION_CALL);Uri uri = Uri.parse(“tel:10086”);intent.setData(uri);ComponentName componentName = intent.resolveActivity(getPackageManager());if(componentName != null){startActivity(intent);}

在该示例代码中,我们使用了Intent.ACTION_CALL作为intent对象的action,并且在AndroidManifest.xml中添加了如下权限:

>

我们使用tel:协议的URI,在协议后面的是要拨打的号码,将该Uri作为intent对象的data。

拍照冬天已经到来,春天还会远吗?

Android中常见Intent习惯用法

相关文章:

你感兴趣的文章:

标签云: