美文网首页
Intent的隐式启动匹配规则

Intent的隐式启动匹配规则

作者: 离人歌 | 来源:发表于2017-02-04 10:47 被阅读130次

    Intent有隐式启动和显示启动两种方式:
    显示启动就是指明启动的组件名称 XXX.class
    Intent xianshiIntent = new Intent(this,Main5Activity.class);
    startActivity(xianshiIntent);

    隐式启动就是通过在AndroidMainfest.xml中配置Activity的Intent-filter来控制启动
    intent-filter中有三种参数:action,category,data三种参数,我通过不同的组合来观察三种参数的匹配规则:
    1 没有intent-filter :略 根本不会有反应
    2 写了intent-filter但是内部不写参数 :我的编译器无法通过编译
    3 写了intent-filter只写参数action

        <activity android:name='.Main2Activity'>
            <intent-filter>
                <action android:name='com.pczhu.custom.action'/>
            </intent-filter>
        </activity>
    

    报错 android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.pczhu.custom.action }

    4 action和category参数都添加:

        <activity android:name=".Main2Activity">
            <intent-filter>
                <action android:name="com.pczhu.custom.action"/>
    
                <category android:name="android.intent.category.DEFAULT"/>
    
            </intent-filter>
        </activity>
    

    代码启动:

                Intent intent = new Intent();
                intent.setAction("com.pczhu.custom.action");
                //intent会为你默认加上android.intent.category.DEFAULT                
                startActivity(intent);
    

    正确启动

    5 action和category参数都添加但是category写成别的:匹配失败
    6 action和category参数都添加,另外添加data:

            <activity android:name=".Main2Activity">
                <intent-filter>
                <action android:name="com.pczhu.custom.action"/>
    
                <category android:name="android.intent.category.APP_EMAIL"/>
    
                <data android:scheme="myscheme"/>
                </intent-filter>
           </activity>
    

    代码启动

                Intent intent = new Intent();
                intent.setAction("com.pczhu.custom.action");
                //                不加 无法启动
                //                intent.setData(Uri.parse("abc://abc"));//无法启动
                //                intent.setData(Uri.parse("myscheme"));//无法启动
                //                intent.setData(Uri.parse("myscheme://"));//可以启动
                //                intent.setData(Uri.parse("myscheme://abc"));//可以启动
                startActivity(intent);  
    

    7 action和data参数都添加 category不加:不能启动
    8 多个Activity匹配弹出选择框如图

    device-2017-02-04-104227.png

    相关文章

      网友评论

          本文标题:Intent的隐式启动匹配规则

          本文链接:https://www.haomeiwen.com/subject/upejittx.html