在实际使用中,隐式意图一般用于启动一些Android系统内置的应用去进行处理,例如:调用照相机进行拍照、调用短信发送一条短信、启动拨号器编辑一个号码、直接拨打一个电话等。而有些应用实际上就是对Android系统内置的应用进行功能的扩展,这部分的应用也会参照系统应用去配置意图过滤器,使其它组件在调用的时候对其进行选择。学习这部分内容,可以查看官方文档,或者直接阅读Android应用的源码。下面就介绍一些常用的调用Android系统应用的Intent。 向拨号器传递号码
开启拨号器,可以用Intent.ACTION_DIAL对Intent的Action进行设置,拨号器还允许以Uri的形式传递一个电话号码,以"tel:"为前缀。主要用于一些不确定电话格式的数据,在拨号前,给用户提供一个编辑号码的机会。
Uri类提供了一个方便的parse()方法,可以把一个String类型的数据转化成Uri。
示例:开启拨号器,并显示传递的电话号码。
代码清单:\codes\06\05\SystemIntentDemo\src\com\bookdemo\systemintentdemo \MainActivity.java
/** * 启动拨号面板,并且传递电话号码 */ private void startDial() { // 构造Intent对象 Intent intent = new Intent(); // 设置Action和电话号码 intent.setAction(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:13000000000")); startActivity(intent); }
在模拟器上运行效果如图:
对于一些确定了电话号码规范行的情况,可以直接使用Intent.ACTION_CALL为Intent的Action属性进行设置,它需要传递一个前缀为"tel:"的Uri数据,用于传递电话号码。
如果使用Intent.ACTION_CALL直接拨打一个电话,需要为应用在清单文件AndroidManifest.xml中增加拨打电话的权限:
<uses-permission android:name="android.permission.CALL_PHONE"/>
示例:传递一个电话号码进行直接拨号。
代码清单:\codes\06\05\SystemIntentDemo\src\com\bookdemo\systemintentdemo \MainActivity.java
/** * 按照指定的电话号码进行直接拨号 */ private void callPhone() { // 构造Intent对象 Intent intent = new Intent(); // 设置Action和电话号码 intent.setAction(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:18612345678")); startActivity(intent); }
在模拟器上运行效果如下:
展示系统内置联系人应用中的联系人列表,可以使用Intent.ACTION_VIEW设置Intent的Action属性,并指定Data属性为"comtent://contacts/people"。它将开启联系人列表,供用户操作。
示例:开启一个联系人应用,展示联系人列表。
代码清单:\codes\06\05\SystemIntentDemo\src\com\bookdemo\systemintentdemo \MainActivity.java
/** * 打开联系人列表 */ private void openPeopleList() { // 构造Intent对象 Intent intent = new Intent(); // 设置Action和Data intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse("content://contacts/people")); startActivity(intent); }
在模拟器上运行效果如下:
可以通过Intent.ACTION_SENDTO设置Intent的Action属性来开启短信应用,通过Data属性来指定短信发送的号码,它是一个以"smsto"为前缀的Uri。如果需要传递短信内容,可以设置Extras属性的Key为"sms_body"的内容。
示例:根据电话号码和短信内容,开启短信发送页面。
代码清单:\codes\06\05\SystemIntentDemo\src\com\bookdemo\systemintentdemo\MainActivity.java
/** * 展示ID为1的联系人 */ private void SendToSm() { Uri uri = Uri.parse("smsto:18612345678"); Intent intent = new Intent(Intent.ACTION_SENDTO, uri); intent.putExtra("sms_body", "这是一个新的短消息"); startActivity(intent); }
在模拟器上运行效果如下:
若需要开启浏览器访问网页,可以使用Intent.ACTION_VIEW设置Intent的Action属性,并在Data中传递待访问的网址, Uri以"http://"为前缀。
示例:根据网址,通过内置浏览器访问对应的网址。
代码清单:\codes\06\05\SystemIntentDemo\src\com\bookdemo\systemintentdemo\MainActivity.java
/** * 按照指定的电话号码进行直接拨号 */ private void startBrowser() { // 构造Intent对象 Intent intent = new Intent(); // 设置Action和网址 intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.cnblogs.com/plokmju/")); startActivity(intent); }
在模拟器上运行效果:
使用Intent.ACTION_MAIN和Intent.CATEGORY_HOME分别设置Intent的Action和Category属性,可以模拟点击HOME键的效果,无论在何种情况下,均会回退到HOME页。
示例:模拟点击HOME键效果。
代码清单:\codes\06\05\SystemIntentDemo\src\com\bookdemo\systemintentdemo\MainActivity.java
/** * 返回桌面 */ private void returnHome() { // 构造Intent对象 Intent intent = new Intent(); // 设置Action和Category属性 intent.setAction(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); // 开启Activity回到HOME桌面 startActivity(intent); }
在模拟器上运行效果如下,点击后直接返回桌面: