Android第一行代码学习笔记五---隐式Itent启动其它程序的活动

Posted 浅恋湾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android第一行代码学习笔记五---隐式Itent启动其它程序的活动相关的知识,希望对你有一定的参考价值。

使用隐式Itent,不仅可以启动自己程序的活动,还可以启动其它程序的活动,这使得android多个应用程序之间的功能共享成为了可能,比如你的应用程序中需要展示一个网页,这时你没必要自己去实现一个浏览器,只需要调用系统的浏览器来打开这个网页就行了。修改firstActivity中点击按钮事件的代码,如下:

button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                Intent intent=new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("www.baidu.com"));
                startActivity(intent);
            }
        });

这里我们首先指定了Intent的action的Intent.ACTION_VIEW,这是一个Android系统内置的动作,其常量值为android.intent.action.VIEW,然后通过Uri.parse()方法,将一个网址字符串解析成一个Uri对象,再调用Intent的setData()方法将这个Uri对象传递进去。setData()方法接收一个Uri对象,主要用于指定当前Itent正在操作的数据,而这些数据通常都是以字符串的形式传入到Uri.parse()方法中解析产生的。

重新运行程序,点击按钮就可以看到打开了系统浏览器。

我们还可以在<intent-filter>标签中再配置一个<data>标签,用于更精确的指定当前活动能够响应什么什么类型的数据。<data>标签主要可以配置以下内容。

android:scheme   用于数据的协议部分,如以上的http部分。

android:host         用于指定数据的主机名部分,如上例的www.baidu.com部分

android:port          用于指定数据的端口部分,一般紧随在主机名后面。

android:path         用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容。

android:mimeType 用于指定可以处理的数据类型,允许使用通配符的方式进行指定。

只有<data>标签和Intent中携带的Data完全一致时,当前活动才能响应Intent。不过一般在<data>标签都不会指定过多的内容,如上示例只要指定android:scheme为http就可以响应所以的http协议的Intent了。

下面自己建立一个活动,让它也能响应打开网页的Intent:

右击com.example.firstactivity包->New->Activity->Empty Activity,新建thirdActivity,勾选Generate Layout File,布局文件名thirdlayout,Finish.打开thirdlayout.xml改成如下内容:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:id="@+id/Button3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button3"/>
</LinearLayout>

thirdActivity中代码保持不变,最后在AndroidManifest.xml修改注册信息:

<activity android:name=".thirdActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:scheme="http"/>
            </intent-filter>
        </activity>

在thirdActivity的<intent-filter>中配置当前活动能响应的action是Intent.ACTION_VIEW的常量值,category指定默认的category值,另外在<data>标签通过android:scheme指定数据的协议部分必须是http协议,这样thirdActivity应该就和浏览器一样,能够响应一个打开网页的Intent了。

注意:虽然我们声明了thirdActivity可以响应打开网页的Intent的,但实际上这个活动并没有加载并显示网页的功能。

 除了http协议外,还可以指定其它协议,下面代码展示了调用系统拨号界面:

 

Button button = (Button) findViewById(R.id.Button1);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                Intent intent=new Intent(Intent.ACTION_DIAL);
                intent.setData(Uri.parse("tel:10086"));
                startActivity(intent);
            }
        });

 

首先指定了Itent的action是Intent.ACTION_DIAL,这又是一个Android系统内置的动作,然后在data部分指定协议是tel,号码是10086.重新运行程序,效果图如下:

 

以上是关于Android第一行代码学习笔记五---隐式Itent启动其它程序的活动的主要内容,如果未能解决你的问题,请参考以下文章

Android第一行代码--学习笔记(更新中ing)

Android第一行代码学习笔记---手动创建活动

《第一行代码 第二版》Android开发学习笔记 java

Android :安卓第一行代码学习笔记之 解析JSON格式数据

Android第一行代码学习笔记二---在活动中使用Toast

Android第一行学习代码笔记四---使用Intent在活动之间穿梭