天天看点

Android关于隐式Intent

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中。