其实intent-filter的使用主要是用于隐式activity和主启动activity, 很多显式的activity根本不定义intent-filter!

总体说明可以看看 http://2960629.blog.51cto.com/2950629/633988, 具体内容 :

1、要弄清楚这个问题,首先需要弄明白什么是implicit(隐藏) intent什么是explicit(明确) intent。

Explicit Intent明确的指定了要启动的Acitivity ,比如以下Java代码:
Intent intent= new Intent(this, B.class)

Implicit Intent没有明确的指定要启动哪个Activity ,而是通过设置一些Intent Filter来让系统去筛选合适的Acitivity去启动。
2、intent到底发给哪个activity,需要进行三个匹配,一个是action,一个是category,一个是data。

理论上来说,如果intent不指定category,那么无论intent filter的内容是什么都应该是匹配的。但是,如果是implicit intent,android默认给加上一个CATEGORY_DEFAULT,这样的话如果intent filter中没有android.intent.category.DEFAULT这个category的话,匹配测试就会失败。所以,如果你的 activity支持接收implicit intent的话就一定要在intent filter中加入android.intent.category.DEFAULT。

例外情况是:android.intent.category.MAIN和android.intent.category.LAUNCHER的filter中没有必要加入android.intent.category.DEFAULT,当然加入也没有问题。

我们定义的activity如果接受implicit intent的话,intent filer就一定要加上android.intent.category.DEFAULT这个category。
android.intent.category.LAUNCHER 具体有什么作用?我在xml里面加和不加 感觉没什么区别啊。谁能解释下!
<activity android:name="APAct">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="URLAct">
<intent-filter>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
一个应用程序可以有多个Activity,每个Activity是同级别的,那么在启动程序时,最先启动哪个Activity呢?有些程序可能需 要显示在程序列表里,有些不需要。怎么定义呢?android.intent.action.MAIN决定应用程序最先启动的Activity android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里
因为你的程序可能有很多个activity
只要xml配置文件中有这么一个intent-filter,而且里面有这个launcher,那么这个activity就是点击程序时最先运行的那个activity。

现在你只有一个activity,那么加不加就没有关系了。
用于模拟器启动时设置为默认打开为的activity

这里重点说明主启动activity

第一种情况:有MAIN,无LAUNCHER,无法启动,程序列表中无图标
原因:android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里
第二种情况:无MAIN,有LAUNCHER,无法启动,程序列表中无图标
原因:android.intent.action.MAIN决定应用程序最先启动的Activity,如果没有Main,则不知启动哪个Activity,故也不会有图标出现
console里面两种情况显示一样:

4-07-08 08:27:22 - MobileMusic40] Android Launch!
[2014-07-08 08:27:22 - MobileMusic40] adb is running normally.
[2014-07-08 08:27:22 - MobileMusic40] No Launcher activity found!
[2014-07-08 08:27:22 - MobileMusic40] The launch will only sync the application package on the device!

[2014-07-08 08:27:22 - MobileMusic40] Performing sync
[2014-07-08 08:27:22 - MobileMusic40] Automatic Target Mode: using device 'd07ab501a9e6iKuIDs105212d1'
[2014-07-08 08:27:23 - MobileMusic40] Uploading MobileMusic40.apk onto device 'd07ab501a9e6iKuIDs105212d1'
[2014-07-08 08:27:25 - MobileMusic40] Installing MobileMusic40.apk...
[2014-07-08 08:27:29 - MobileMusic40] Success!
[2014-07-08 08:27:29 - MobileMusic40] \MobileMusic40\bin\MobileMusic40.apk installed on device
[2014-07-08 08:27:29 - MobileMusic40] Done!

如果两者都正确设置,应用正常启动,console会有以下信息

[2014-07-08 08:25:02 - MobileMusic40] Starting activity cmccwm.mobilemusic.ui.activity.PreSplashActivity on device d07ab501a9e6iKuIDs105212d1
[2014-07-08 08:25:02 - MobileMusic40] ActivityManager: BT INFO: 2.2
[2014-07-08 08:25:02 - MobileMusic40] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=cmccwm.mobilemusic/.ui.activity.PreSplashActivity

更多相关文章

  1. Android(安卓)SystemServer 启动流程
  2. Android(安卓)Activity 四种启动模式
  3. Android推送服务(GCM)
  4. android 卸载程序、清除数据、停止服务用法
  5. 终结篇:Android(安卓)startActivity原理分析(基于Android(安卓)8.
  6. Android(安卓)Service 之StartService()
  7. Android(安卓)couldn't find xxx.so 问题解决 兼容解决
  8. Android实现开机自动启动Service或app的方法
  9. ANR问题

随机推荐

  1. Android代码优化——使用Android(安卓)li
  2. 在android的状态栏(statusbar)中增加menu
  3. 十八般武艺!移动应用开发者必备的18款利器
  4. Android(安卓)SoftAp支持 (一)
  5. android 读取assets文件夹下的文件资源
  6. Android开发中后台的Service服务探索
  7. 使用NDK移植开源项目,JNI的使用技巧
  8. Android(安卓)群英传-第五章:Android(安
  9. android drawBitmapMesh and drawVertice
  10. eclipse项目导入android studio 各类问题