您的位置:首页 > 移动开发 > Android开发

Android intent的显示意图和隐式意图的区别

2017-02-11 22:27 501 查看
一:两种启动意图:

1.显示意图启动的两种方法:

//显示意图
public void click2(View v){
Intent intent = new Intent();
intent.setclass(this,SecondActivity);
startActivity(intent);
}
//显示启动拨号器

public void click3(View v){
Intent intent = new Intent();
intent.setClassName("com.android.dialer","com.android.dialer.DialtactsActivity");
startActivity(intent);


}

2.隐式意图启动自己定义的activity的方式

<activity android:name="com.qwd.runactivity.SecondActivity">
<intent-filter>
<action android:name="a.b.c"/>
<category android:name="android.intent.category.DEFAULT">
<intent-filter>
/activity>

//隐式启动SecondActivity
public void click4(View v){
Intent intent = new Intent();
intent.setAction("a.b.c");
startActivity(intent);


}

3.隐式意图启动系统的activity的方式

//隐式启动拨号器
public void click5(View v){
Intent intent = new Intent();
intent.setAction(Intent.ACTION_DIAL);
startActivity(intent);


}

4.注意:隐式意图必须全部匹配

<activity android:name="com.qwd.runactivity.SecondActivity">
<intent-filter>
<action android:name="a.b.c"/>
<data android:scheme="qwd"/>
<category android:name="android.intent.category.DEFAULT">
<intent-filter>
</activity>

//隐式启动SecondActivity
public void click6(View v){
Intent intent = new Intent();
intent.setAction("a.b.c");
intent.setData(Uri.parse("qwd:abc"));
//如果不匹配Category,那么系统会自动添加以下代码
//intent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity(intent);


}

4.1.mimeType也必须匹配 setData匹配的不是data标签而是scheme属性, setT
4000
ype匹配的是mimeType属性

5.隐式意图和显示意图的总结

###显式启动

* 指定上下文和目标Activity的字节码

* 用于启动同一应用的Activity

* 指定目标Activity所在的应用的包名和目标Activity的包名类名(然并卵)

* 用于启动不同应用的Activity

隐式启动

定义隐式intent,启动Activity时,系统会遍历所有清单文件,寻找是否存在与该intent匹配的intent-filter,如果有,则启动intent-filter对应的Activity,如果没有,则报错

匹配:所有子节点要完全相同

intent-filter可以定义多个,任意匹配一个即可

多个action或者data任意匹配一个即可

setData匹配的是scheme

setType匹配的是mimeType

data标签只要有scheme,就必须匹配,同理只要有mimeType,就必须匹配

应用场景

启动同一个应用的Activity,使用显式

显式效率高于隐式,能用显式就用显式

启动不同应用的Activity,使用隐式

如果隐式intent与多个Activity的intent-filter匹配,那么会弹出对话框让用户选一个来启动
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: