一、显示调用Intent
Intent intent=new Intent(this,SecondActivity.class);
startActivity(intent);
二、隐式启动Intent
Intent intent=new Intent("com.xu.mytest");
startActivity(intent);
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="com.xu.mytest"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
三、Activity 中 Intent Filter 的匹配过程 :
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri
intent.setData(data);
startActivity(intent);
隐式启动会找到所匹配到的应用,并提示用户选择打开方式
如果有多个组件被匹配成功,就会以对话框列表的方式让用户进行选择。
每个Intent中只能指定一个action,但却能指定多个category;类别越多,动作越具体,意图越明确
在Intent添加类别可以添加多个类别,那就要求被匹配的组件必须同时满足这多个类别,才能匹配成功。操作Activity的时候,如果没有类别,须加上默认类别
当Intent匹配成功的组件有多个时,显示优先级高的组件,如果优先级相同,显示列表让用户自己选择
优先级从-1000至1000,并且其中一个必须为负的才有效
注:系统默认的浏览器并没有做出优先级声明,其优先级默认为正数。
显式启动:直接指定要跳转的Activity类名,不用过滤,效率高,适用于同一个应用中的不同Activity跳转
隐式启动:需要过滤,相对耗时,但可以找到所有之匹配的应用。适用于不同应用之间的Activity跳转。
<br />
Intent七大属性:由以下各个组成部分:
- component(组件):目的组件
- action(动作):用来表现意图的行动
- category(类别):用来表现动作的类别
- data(数据):表示与动作要操纵的数据
- type(数据类型):对于data范例的描写
- extras(扩展信息):扩展信息
- Flags(标志位):期望这个意图的运行模式
附:更多隐式Intent的用法举例
来看看intent中data属性包括:
- android:scheme
用于指定数据的协议部分,如上例中的http部分 - android:host
用于指定数据的主机名部分,如上例中的部分 - android:port
用于指定主机名和端口之后的部分,一般紧随在主机名之后 - android:mimeType
用于指定可以处理的数据类型,允许使用通配符的方式进行指定
如:传递手机拨号事件
Intent intent = new Intent();
intent.setAction(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="android.intent.action.DIAL"/>
<data android:scheme="tel"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>