概述
Intent(意图,目的),用于在活动(activity)之间穿梭,分为显式Intent和隐式Intent
显式Intent
1 | public void onClick(View v) { |
隐式Intent
隐式Intent并未明确指出启动哪一个活动,而是通过action和category等信息,让系统分析出让哪个Intent启动
比如采用隐式的方式从activity1启动activity2
1 | //修改AndroidManifest.xml配置文件,在SecondActivity中添加<intent-filter>的两行内容: |
在
<action/>
标签指明了当前活动可以响应的action:"com.example.day01_empty.ACTION_START"
而
<category/>
包含了附加信息,指明当前活动能响应的Intent可能带有category只有
<action/>
和<category>
中的内容同时匹配Intent中指定的action和category时,该活动才能响应该Intent。x
在activity1中进行跳转
1 | public void onClick(View v) { |
action和category
每个Intent只能指定一个action,但却能指定多个category,使用addCategory()方法添加
1 | public void onClick(View v) { |
隐式Intent的更多用法
用系统浏览器打开URL
指定action是Intent.ACTION_VIEW,这是Android的一个内置动作。对应配置文件的常量值是android.intent.action.VIEW,然后通过Intent.setData()方法将Uri.parse()解析的Uri对象传递进去
1 | public void onClick(View v) { |
系统拨号
指定Intent的action是Intent.Action_DIAL,也是内置动作指定协议是tel,号码是10086,经过Uri.parse()解析后传入setData()
1 | public void onClick(View v) { |
进阶用法
可以在<intetent-filter>标签中再添加一个<data>标签,用来精确指定当前活动能响应的数据类型。配置下列内容:
android:scheme
:指定数据协议android:host
:指定主机名android:port
:指定端口号android:path
:指定之后的内容android:mimeType
:指定处理的数据类型,允许通配符
例如修改activity2的注册信息,使得activity2可以响应系统拨号
1 | <activity android:name=".activity.SecondActivity"> |
这样的话,再次运行上面的拨号那个例子,系统拨号和页面2都会做出响应,供我们来选择,如下图