Android中Intent习惯用法

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

需要注意的是,在执行了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中添加了如下权限:

 

复制代码 <uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
我们使用tel:协议的URI,在协议后面的是要拨打的号码,将该Uri作为intent对象的data。

 

拍照

要想通过Intent启动摄像机进行拍照,我们需要设置intent对象的action值为MediaStore.ACTION_IMAGE_CAPTURE的action。然后我们用key为MediaStore.EXTRA_OUTPUT的extra设置图片的输出路径,最后调用startActivityForResult()方法以启动摄像机应用,并重写我们的onActivityResult()以便在该方法中得知拍照完成。