为了注册一个应用程序组件为 Intent 处理者,在组件的 manifest 节点添加一个 intent-filter 标签。在 Intent Filter 节点里使用下面的标签(关联属性),你能指定组件支持的动作、种类和数据。
1、动作测试:
<activity android:name="com.x210.intentfilters.OneActivity" android:label="oneActivity"> <intent-filter> <action android:name="myapp.action.test1" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
规则a.一条<intent-filter>元素至少应该包含一个<action>,否则任何Intent请求都不能和该<intent-filter>匹配。
<activity android:name="com.x210.intentfilters.OtherActivity" android:label="otherActivity"> <intent-filter> <category android:name="cate1"/> <category android:name="cate2"/> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
以上<intent-filter>元素没有包含<action>标签,任何Intent请求都无法与该<intent-filter>匹配。
规则b.如果Intent请求的Action和<intent-filter>中个某一条<action>匹配,那么该Intent就通过了这条<intent-filter>的动作测试。
<activity android:name="com.x210.intentfilters.OneActivity" android:label="oneActivity">
<intent-filter>
<action android:name="myapp.action.test1" />
<action android:name="myapp.action.test2" />
<action android:name="myapp.action.test3" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
以下几种Intent请求都可以通过上述<intent-filter>的动作测试。
请求1:
Intent intent = new Intent("myapp.action.test1"); startActivity(intent);请求2:
Intent intent = new Intent("myapp.action.test2"); startActivity(intent);如果Intent请求或<intent-filter>中没有说明具体的Action类型,那么会出现下面两种情况。
(1) 如果<intent-filter>中没有包含任何Action类型,那么无论什么Intent请求都无法和这条<intent-filter>匹配;
(2) 反之,如果Intent请求中没有设定Action类型,那么只要<intent-filter>中包含有Action类型,这个Intent请求就将顺利地通过<intent-filter>的行为测试。
2、类别测试
<activity android:name="com.x210.intentfilters.OtherActivity" android:label="otherActivity"> <intent-filter> <action android:name="myapp.action.test1" /> <category android:name="cate1"/> <category android:name="cate2"/> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>只有当Intent请求中所有的Category与组件中某一个IntentFilter的<category>完全匹配时,才会让该 Intent请求通过测试,IntentFilter中多余的<category>声明并不会导致匹配失败。一个没有指定任何类别测试的 IntentFilter仅仅只会匹配没有设置类别的Intent请求。
以下三种Intent请求都可以通过上述<intent-filter>的类别测试。
请求1:
Intent intent = new Intent("myapp.action.test1"); intent.addCategory("cate1"); startActivity(intent);请求2:
Intent intent = new Intent("myapp.action.test1"); intent.addCategory("cate2"); startActivity(intent);
请求3:
Intent intent = new Intent("myapp.action.test1"); intent.addCategory("cate1"); intent.addCategory("cate2"); startActivity(intent);
实例部分源码:
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.x210.intentfilters" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="9" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.x210.intentfilters.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.x210.intentfilters.OneActivity" android:label="oneActivity"> <intent-filter> <action android:name="myapp.action.test1" /> <action android:name="myapp.action.test2" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name="com.x210.intentfilters.OtherActivity" android:label="otherActivity"> <intent-filter> <action android:name="myapp.action.test1" /> <category android:name="cate1"/> <category android:name="cate2"/> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> </manifest>MainActivity.java(核心代码)
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); actionbutton = (Button) findViewById(R.id.ActionButton); categorybutton = (Button) findViewById(R.id.CategoryButton); actionbutton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("myapp.action.test1"); startActivity(intent); } }); categorybutton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent("myapp.action.test1"); intent.addCategory("cate1"); intent.addCategory("cate2"); startActivity(intent); } }); }特别提醒实例源码(免费): http://download.csdn.net/detail/a13429921973/5720603