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

来源:互联网 发布:韩国网络电视 编辑:程序博客网 时间:2024/06/05 09:58

一:两种启动意图:
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>//隐式启动SecondActivitypublic 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>//隐式启动SecondActivitypublic 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属性, setType匹配的是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匹配,那么会弹出对话框让用户选一个来启动
1 0
原创粉丝点击