



在实际使用中,隐式意图一般用于启动一些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);
}
在模拟器上运行效果如下,点击后直接返回桌面: