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