在之前的经验一直以为Android Manifest中android.intent.action.MAIN用来标识这个app的主界面,每个Manifest只能配置一个,一直碰到的Manifest也确实如此。但是后来发现原生Setting的Manifest有很多个android.intent.action.MAIN,于是特意查了一下android.intent.action.MAIN的使用:一个程序可能有多个activity,那么在启动程序的时候最先启动哪个是由
action android:name="android.intent.action.MAIN"决定的
如果有多个activity配置了main属性,那么在隐式启动activity的时候要根据category,meta-data来判断启动哪个activity。
android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里 也就是说配置了
category android:name="android.intent.category.LAUNCHER"的activity 会在点击了launcher上的应用图标后启动
如果有两个activity配置了,会在Launcher显示两个图标(这个没有尝试过,需要写个apk试一下)
比如某项目在拓展原生Setting的时候就把原生的
<!-- <category android:name="android.intent.category.LAUNCHER" /> -->注释掉了,自己写一个Setting加上这个属性,这样在主界面就可以点击图标启动自定义的Setting
另外为什么要加入android.intent.category.DEFAULT
如果通过隐式启动activity(也就是通过startActivity)的方式启动目标activity,在它的manifest没有加上面的标签会报错,是因为Android认为每个activity都需要有默认的category,如果manifest不写,会导致intent匹配失败
从上面的论述还可以获得以下信息:
1、一个 Intent 可以有多个 category,但至少会有一个,也是默认的一个 category。
2、只有 Intent 的所有 category 都匹配上,Activity 才会接收这个 Intent。