Intent的四个重要属性——Action、Data、Category、Extras

Intent作为联系各Activity之间的纽带,其作用不仅仅只限于简单的数据传递。通过自带的属性,完成许多复杂的操作。

例如:直接调用拨号功能、直接自动调用合适的程序打开不同类型的文件等等。

Intent主要有以下四个重要属性,如下:

Action:Action属性的值为一个字符串,它代表系统中已经定义了一系列常用的动作,可以通过setAction()方法或在清单文件AndroidManifest.xml中设置,默认为:DEFAULT。

Data:Data通常是URI格式定义的操作数据,通过setData()方法设置。例如:tel://。

Category:该属性用于指定当前动作(Action)被执行的环境,通过addCategory()方法或在清单文件AndroidManifest.xml中设置,默认为:CATRGORY_DEFAULT。

Extras: Extras属性主要用于传递目标组件所需要的额外数据。通过putExtras()方法设置。

下面详细介绍一下:

Action:

ACTION_MAIN:Android Application的入口,每个Android应用必须且只能包含一个此类型的Action声明。

ACTION_VIEW:系统根据不同的Data类型,通过已注册的对应Application显示数据。

ACTION_EDIT:系统根据不同的Data类型,通过已注册的对应Application编辑示数据。

ACTION_DIAL:打开系统默认的拨号程序,如果Data中设置了电话号码,则自动在拨号程序中输入此号码。

ACTION_CALL:直接呼叫Data中所带的号码。

ACTION_ANSWER:接听来电。

ACTION_SEND:由用户指定发送方式进=进行数据发送操作。

ACTION_SENDTO:系统根据不同的Data类型,通过已注册的对应Application进行数据发送操作。

ACTION_BOOT_COMPLETED:Android系统在启动完毕后发出带有此Action的广播(Broadcast)。

ACTION_TIME_CHANGED:Android系统的时间发生改变后发出的带有此Action的广播(Broadcast)。

ACTION_PACKAGE_ADDED:Android系统安装了新的Application之后发出的带有此Action的广播(Broadcast)。

ACTION_PACKAGE_CHANGED:Android系统中已存在的Application发生改变之后(如应用更新操作)发出的带有此Action的广播(Broadcast)。

ACTION_PACKAGE_REMOVED:卸载了Android系统已存在的Application之后发出的带有此Action的广播(Broadcast)。

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);

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

android:scheme 用于指定数据的协议部分。如上例中的http部分。

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

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

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

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

Category:

CATEGORY_DEFAULT:Android系统中默认的执行方式,按照普通Activity的执行方式执行。

CATEGORY_HOME:设置该组件为Home Activity。

CATEGORY_PREFERENCE:设置该组件为Preference。

CATEGORY_LAUNCHER:设置该组件为在当前应用程序启动器中优先级最高的Activity,通常为入口ACTION_MAIN配合使用。

CATEGORY_BROWSABLE:设置该组件可以使用浏览器启动。

CATEGORY_GADGET:设置该组件可以内嵌到另外的Activity中。

Extras: 

EXTRA_BCC:存放邮件密送人地址的字符串数组。

EXTRA_CC:存放邮件抄送人地址的字符串数组。

EXTRA_EMAIL:存放邮件地址的字符串数组。

EXTRA_SUBJECT:存放邮件主题字符串。

EXTRA_TEXT:存放邮件内容。

EXTRA_KEY_EVENT:以keyEvent对象方式存放触发Intent的按键。

EXTRA_PHONE_NUMBER:存放调用ACTION_CALL时的电话号码。

Data: 

tel://:号码数据格式,后跟电话号码。

mailto://:邮件数据格式,后跟邮件收件人地址。

smsto://:短信数据格式,后跟短信接收号码。

content://:内容数据格式,后跟需要读取的内容。

file://:文件数据格式,后跟文件路径。

market://search?q = pname:pkgname:市场数据格式,在Google Market里搜索报名为pkgname的应用。

geo://latitude,longitude:经纬数据格式,在地图上显示经纬度指定的位置。

在intent-filter中指定data属性的实际目的是:要求接收的intent中的data必须符合intent-filter中指定的data属性,这样达到反向限制Intent的作用。

实践操作熟悉一下:

我们在AndroidManifest.xml进行如下设置:

<activity android:name=".TestActivity">
    <intent-filter>
         <action android:name="com.example.test"/>
         <data android:scheme="file"/>
    </intent-filter>
</activity>

因此启动该Activity的Intent需要如下设置:

Intent intent = new Intent();
Uri uri =  Uri.parse("file://com.android.test:520/wan/sd");
intent.setData(uri);

 data属性解析:android:scheme、android:host、android:port、android:path、android:mimeType 

data的前四个属性构成了URI的组成部分,最后一个属性mimeType设置了数据的格式。

data元素的URI模型为:scheme://host:port/path

解析:

scheme ——> file

host ——> com.android.example.test

port ——> 520

path ——> wan/sd

发布了50 篇原创文章 · 获赞 37 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/m0_37868230/article/details/82811813