`
touzilicai
  • 浏览: 6730 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

android : 深入理解intent-filter的action,category和data

 
阅读更多
其实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
分享到:
评论

相关推荐

    ImagesWidget.rar

    android:name="android.intent.action.MAIN" /&gt; &lt;category android:name="android.intent.category.LAUNCHER" /&gt; &lt;/intent-filter&gt; &lt;intent-filter&gt; &lt;action android:name="android.appwidget.action.APP...

    android 8.1设置添加Ethernet功能选项

    &lt;action android:name="android.intent.action.MAIN" /&gt; &lt;category android:name="android.intent.category.DEFAULT" /&gt; &lt;category android:name="android.intent.category.VOICE_LAUNCH" /&gt; &lt;category android:...

    点击浏览器中的URL链接,启动特定的App。

    &lt;action android:name="android.intent.action.VIEW"/&gt; &lt;category android:name="android.intent.category.DEFAULT" /&gt; &lt;category android:name="android.intent.category.BROWSABLE" /&gt; &lt;data android:scheme=...

    android 8.1设置添加Ethernet功能选项patch文件

    + &lt;action android:name="android.intent.action.MAIN" /&gt; + &lt;category android:name="android.intent.category.DEFAULT" /&gt; + &lt;category android:name="android.intent.category.VOICE_LAUNCH" /&gt; + &lt;category ...

    详解Android中Intent对象与Intent Filter过滤匹配过程

    如果对Intent不是特别了解,可以参见博文《详解Android中Intent的使用方法》,该文对本文要使用的action、category以及data都进行了详细介绍。如果想了解在开发中常见Intent的使用,可以参见《Android中Intent习惯...

    Androidmanifest.xml文件分析

    除了能声明程序中的Activities, ContentProviders, Services, 和Intent Receivers,还能指定permissions和instrumentation(安全控制和测试) 二、AndroidManifest.xml结构 &lt;?xmlversion="1.0"encoding="utf-8"?&gt; ...

    Android 中IntentFilter的匹配规则实例详解

    如果要成功匹配该intent-filter我们需要完全匹配该intent-filter中的 action、category、data。 示例: &lt;activity android:name=.MainActivity&gt; &lt;intent&gt; &lt;action android:name=com.blueberry.action&gt;&lt;/action&gt; &...

    新版Android开发教程.rar

    的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...

    Android实例代码

    Action、Category属性与intent-filter配置; Data、Type属性与intent-filter配置; Extra属性; 5.3、使用Intent创建Tab页面: 第6章、Android应用的资源 6.1、资源的类型及存储方式: 6.2、使用字符串、颜色、...

    疯狂Android讲义(第2版)源代码 第6章~第9章

    Action、Category属性与intent-filter配置; Data、Type属性与intent-filter配置; Extra属性; 5.3、使用Intent创建Tab页面: 第6章、Android应用的资源 6.1、资源的类型及存储方式: 6.2、使用字符串、颜色、...

    MapView的使用

    在论坛里看到一篇 "MapView和其它控件一起显示 " 的帖子, 那是很老的一篇帖子了, 很多朋友都说无法在android SDK 1.0上运行。既然那么多人关心,我在这里就把它重写一遍,顺便加入了一些新的功能 ,感兴趣的朋友可以...

    可扩展的文件选择器NoNonsense-FilePicker

    &lt;category android:name="android.intent.category.DEFAULT"/&gt; &lt;/intent-filter&gt; 在java代码中调用选择器: // This always works Intent i = newIntent(context, FilePickerActivity.class); // This works if you...

    Google Android SDK开发范例大全(完整版)

    •将目录改为 /data/app,其中存放用户应用程序。 •列出包含某个应用程序的目录。Android 应用程序文件实际上是归档文件,可通过 WinZip 之类的软件查看。扩展名为 apk。 •发出 ping 命令,查看 Google.com 是否...

    android实习报告(1).doc

    在注册Activity是加入 &lt;intent-filter&gt; &lt;action android:name="android.intent.action.MAIN" /&gt; &lt;category android:name="android.intent.category.LAUNCHER" /&gt; &lt;/intent-filter&gt; 可指定当前的Activity为主Activity...

    ContentProvider

    &lt;category android:name="android.intent.category.LAUNCHER" /&gt; &lt;/intent-filter&gt; &lt;provider android:name=".provider" android:authorities="com.example.tigongzhe.provider" android:multiprocess=...

    android教程之把自己的应用加入到系统分享中

    代码如下:&lt;intent&gt; &lt;action android:name=”android.intent.action.SEND”&gt; &lt;data android:mimeType=”image/*”/&gt; &lt;category android:name=”android.intent.category.DEFAULT”&gt;&lt;/intent&gt; 您可能感兴趣的

    adb1.0.26包含fastboot.exe

    ADB,即 Android Debug Bridge,它是 Android 开发/测试人员不可替代的强大工具,也是 Android 设备玩家的好玩具。 注:有部分命令的支持情况可能与 Android 系统版本及定制 ROM 的实现有关。 基本用法 命令语法 ...

    疯狂Android讲义源码

     第4章 深入理解Activity 169  4.1 建立、配置和使用Activity 170  4.1.1 建立Activity 170  4.1.2 配置Activity 177  4.1.3 启动、关闭Activity 179  4.1.4 使用Bundle在Activity之间  交换数据 181  4.1.5...

Global site tag (gtag.js) - Google Analytics