欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android 隐式意图

程序员文章站 2022-05-28 15:01:28
...

一、隐式意图介绍

显式意图

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

<intent-filter>
<action android:name="...."/>
<category android:name="...."/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="..." android:host="..." android:path="/..." android:type="..."/>
</intent-filter>

以上设置是设置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-filter>
<action android:name="com.babybus_lion.action" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.babybus_lion.category" />
<data
android:host="[www.babybus_lion.com](https://link.jianshu.com?t=http://www.babybus_lion.com)"
android:scheme="babybus_lion"/>
</intent-filter>

代码为:

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");

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

<intent-filter>
<action android:name="com.babybus_lion.action" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.babybus_lion.category" />
<data
android:host="[www.babybus_lion.com](https://link.jianshu.com?t=http://www.babybus_lion.com)"
android:scheme="babybus_lion" android:mimeType="text/*"/>
</intent-filter>

代码为:

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