1.隐式intent启动活动
活动在AndroidManifest.xml中注册时,如果想要能响应隐式Intent,可以添加<intent-filter>来指明当前activity可以响应的action和category,data
<activity android:name=".SecondActivity" android:label="SecondActivity">
<intent-filter>
<action android:name="com.example.activitytest.ACTION_START" />
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="com.example.activitytest.MY_CATEGORY" />
</intent-filter>
</activity>
上述代码:<action>标签指定这个activity可以响应ACTION_START这个action,
<category>指定activity响应MY_CATEGORY这个category,
一个activity中可以设置多个action、多个category、多个data进行组合,这样可以与多个Intent匹配(当一个Activity中有多个Intent进行匹配的时候,建议使用多个intent-filter与Intent进行匹配)
使用隐式Intent时,Intent中传入action和category,交给系统去搜索有没有匹配的action和category,当一个activity的action和category完全匹配时,就能启动这个activity。
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(FirstActivity.this,"点击",Toast.LENGTH_SHORT).show();
// Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
//隐式
Intent intent = new Intent("com.example.activitytest.ACTION_START");
intent.addCategory("com.example.activitytest.MY_CATEGORY");
//调用系统浏览器浏览网页
// Intent intent = new Intent(Intent.ACTION_VIEW);
// intent.setData(Uri.parse("http://wwww.baidu.com"));
startActivity(intent);
}
});
一个Intent中只能指定一个action,可以有多个category多个data,有多个activity匹配时,Android会全部列出,可以进行选择。
2.隐式Intent中action、category属性
action:用来指定activity可以完成哪些动作,系统中定义了很多常用的动作
ACTION_MAIN:Android Application的入口,将当前activity设置为主界面。
ACTION_VIEW:系统根据不同的Data类型,通过已注册的对应Application显示数据。
ACTION_EDIT:系统根据不同的Data类型,通过已注册的对应Application编辑示数据。
ACTION_DIAL:打开系统默认的拨号程序,如果Data中设置了电话号码,则自动在拨号程序中输入此号码。
ACTION_CALL:直接呼叫Data中所带的号码。
ACTION_ANSWER:接听来电。
ACTION_SEND:由用户指定发送方式进行数据发送操作。
如果<intent-filter>中没有指定action,则任何的Intent请求都不能和这条<intent-filter>匹配;
如果Intent中没有指定action,则只要<intent-filter>中指定了action就能匹配(其他条件也匹配的情况下),即默认可以匹配所有的action。
category:指定当前动作(Action)被执行的环境,即这个activity在哪个环境中才能被激活。当不属于这个环境时,不能被激活。
CATEGORY_DEFAULT:默认的执行方式,所有Intent都可以激活它
CATEGORY_LAUNCHER:和ACTION_MAIN配合使用,用于设置主activity。
CATEGORY_HOME:设置该组件为Home Activity。
CATEGORY_BROWSABLE:设置该组件可以使用浏览器启动。
CATEGORY_GADGET:设置该组件可以内嵌到另外的Activity中。