Android 隐式意图

一、隐式意图介绍

显式意图

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设置意图过滤器:







以上设置是设置Activity本身的属性,接下来在程序中要设置的是我们要寻找时匹配的条件:

Intent intent = new Intent();
intent.setAction("....");
intent.addCategory("....");
intent.setData(Uri.parse("...."));//设置data的scheme、host、path条件
intent.setDataAndType(Uri.parse(""),String type);//同时设置data的scheme、host、path、type条件
startActivity(intent);//调用intent.addCategory("android.intent.category.DEFAULT");

三、示例说明

情况一







代码为:

Intent intent = new Intent();
intent.setAction("com.babybus_lion.action");
intent.addCategory("com.babybus_lion.category");
intent.setData(uri));
startActivity(intent); //此方法中调用intent.addCategory("android.intent.category.DEFAULT");

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







代码为:

Intent intent = new Intent();
intent.setAction("com.babybus_lion.action");
intent.addCategory("com.babybus_lion.category");
intent.setDataAndType(uri,"text/*");

你可能感兴趣的:(Android 隐式意图)