购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

6.5 使用Intent启动系统内置应用

6.5.1  使用拨号器拨打电话

在实际使用中,隐式意图一般用于启动一些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);
    }

在模拟器上运行效果如图:

6.5.2 直接拨打电话

对于一些确定了电话号码规范行的情况,可以直接使用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);
    }

在模拟器上运行效果如下:

6.5.3 展示联系人列表

展示系统内置联系人应用中的联系人列表,可以使用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);
    }

在模拟器上运行效果如下:

6.5.4 编辑短信

可以通过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);
    }

在模拟器上运行效果如下:

6.5.5 启动浏览器访问网页

若需要开启浏览器访问网页,可以使用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);
    }

在模拟器上运行效果:

6.5.6 返回系统HOME桌面

使用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);
    }

在模拟器上运行效果如下,点击后直接返回桌面:

LjPufD+jdkUIs4NM6eGjILdrFWOAJo/ri2VBj1jGR+QPyKx01PP5YLraUKhx4QvT

点击中间区域
呼出菜单
上一章
目录
下一章
×