android 隐式意图 intent.addCategory()

一、隐式意图介绍

显式意图我们前面已经提到,形如:
Intent intent = new Intent();
intent.setClass(this,Other.class);//此句表示显式意图,因为明确设置激活对象为Other类
startActivity(intent);

在intent过滤器中的匹配条件有:
(1)action
(2)category
(3)data:scheme、host、path、type
当在程序中设置了这些激活组件的条件,程序就会去寻找最匹配的组件,但是注意:只要有一点不匹配,则就是不匹配;
比如:
Intent intent = new Intent();
intent.setAction("a");//此句只是指定了Action
startActivity(intent);//寻找最匹配的组件激活,内部会调用intent.addCategory("android.intent.category.DEFAULT");

二、隐式Intent的核心代码

首先是在AndroidManifest.xml中为某个Activity设置意图过滤器:

[html] view plaincopy






以上设置是设置Activity本身的属性,接下来在程序中要设置的是我们要寻找时匹配的条件:(1)Intent intent = new Intent();
(2)intent.setAction("....");
(3)intent.addCategory("....");
(4)intent.setData(Uri.parse("...."));//设置data的scheme、host、path条件
(5)intent.setDataAndType(Uri.parse(""),String type);//同时设置data的scheme、host、path、type条件
(6)startActivity(intent);//调用intent.addCategory("android.intent.category.DEFAULT");

Let us see some example:
场景介绍:在MainActivity中有一个按钮,点击按钮后,会进行隐式Intent匹配,最后寻找到并激活OtherActivity.

情况1:
[html] view plaincopy android:name=".OtherActivity"
android:label="OtherActivity" >




android:host="www.babybus_lion.com"
android:scheme="babybus_lion"/>

则代码为:

[java] view plaincopyIntent intent = new Intent();
intent.setAction("com.babybus_lion.action");
intent.addCategory("com.babybus_lion.category");
intent.setData(Uri.parse("babybus_lion://www.xiazdong.com/xia"));
startActivity(intent); //此方法中调用intent.addCategory("android.intent.category.DEFAULT");

情况2:
中多了一个android:mimeType="text/*",此时不能使用intent.setData,而要使用intent.setDataAndType();

[html] view plaincopy android:name=".OtherActivity"
android:label="OtherActivity" >




android:host="www.babybus_lion.com"
android:scheme="babybus_lion" android:mimeType="text/*"/>

代码为:

[java] view plaincopyIntent intent = new Intent();
intent.setAction("com.babybus_lion.action");
intent.addCategory("com.babybus_lion.category");
intent.setDataAndType(Uri.parse("xiazdong://www.babybus_lion.com/xia"));

你可能感兴趣的:(android 隐式意图 intent.addCategory())