Android <intent-filter>

来源:互联网 发布:手机打印软件 编辑:程序博客网 时间:2024/06/06 04:47

Android intent-filter标签顾名思义提信使滤波器,作用可以


Intent-Filter的定义
IntentFilter就是用于描述intent的各种属性, 比如action, category等
一些属性设置的例子:

<action android:name="com.example.project.SHOW_CURRENT" /><category android:name="android.intent.category.DEFAULT" /><data android:mimeType="video/mpeg" android:scheme="http" . . . /><data android:mimeType="image/*" /><data android:scheme="http" android:type="video/*" />

关于IntentFilter的几点注意事项:

(1).android.intent.action.MAIN 与 android.intent.category.LAUNCHER
android.intent.action.MAIN 决定一个应用程序最先启动那个组件,相当于是程序的入口
android.intent.category.LAUNCHER 决定应用程序是否显示在程序列表里(说白了就是是否在桌面上显示一个图标)
这两个属性组合情况:
第一种情况:有MAIN,无LAUNCHER,程序列表中无图标
原因:android.intent.category.LAUNCHER 决定应用程序是否显示在程序列表里

第二种情况:无MAIN,有LAUNCHER,程序列表中无图标
原因:android.intent.action.MAIN 决定应用程序最先启动的Activity,如果没有Main,则不知启动哪个Activity,故也不会有图标出现
所以这两个属性一般成对出现。
如果一个应用中有两个组件intent-filter都添加了android.intent.action.MAIN和
android.intent.category.LAUNCHER这两个属性, 则这个应用将会显示两个图标, 写在前面的组件先运行。

(2).关于隐式intent
每一个通过 startActivity() 方法发出的隐式 Intent 都至少有一个 category,就是 “android.intent.category.DEFAULT”,所以只要是想接收一个隐式 Intent 的 Activity 都应该包括 “android.intent.category.DEFAULT” category,不然将导致 Intent 匹配失败.
比如说一个activity组件要想被其他组件通过隐式intent调用, 则其在manifest.xml中的声明如下:

<activity android:name="com.gesture.QGestureListActivity">     <intent-filter>             <action android:name="com.google.test" />           <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>

(3).关于intent-filter匹配优先级
首先查看Intent的过滤器(intent-filter),按照以下优先关系查找:action->data->category

(4).android.intent.category.LAUNCHER 与 android.intent.category.HOME的区别
android.intent.category.LAUNCHER:android.intent.category.LAUNCHER决定应用程序是否显示在程序列表里,就是android开机后的主程序列表。
android.intent.category.HOME:按住“HOME”键,该程序显示在HOME列表里

0 0
原创粉丝点击