显示意图和隐式意图

来源:互联网 发布:赛尔网络销售 编辑:程序博客网 时间:2024/04/28 16:13
Intent作用:
激活组件

显示意图:一般用在同一个应用程序中组件的相互激活
Intent intent = new Inten(this,Demo2Activity.class);
startActivity(intent);

或:
Intent intent = new Intent();
//intent.setClass(this,Demo2Activity.class);
intent.setClassName("cn.itcast.demoactivity","cn.itcast.demoactivity.Demo2Activity");
//intent.setComponent(new ComponentName(this,"cn.itcast.demoactivity.Demo2Activity"));
startActivity(intent);

隐式意图:用于不同应用程序之间组件的激活
操作系统要根据action data mimetype category进行一个查询
隐式意图的效率要比显示意图的效率低一点,但可以降低耦合(包名甚至类名更改了,组件仍然可以激活)

首先在清单文件中对应的activity节点下配置
<intent-filter>
<action android:name="cn.itcast.demoactivity.haha"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>


Intent intent = new Intent();
intent.setAction("cn.itcast.demoactivity.haha");
intent.addCategory("android.intent.category.DEFAULT");
startActivity(intent);

说明:
action下的name可自定义
category配置默认为"android.intent.category.DEFAULT"

只有清单文件中的配置和代码中的配置一致时才会激活这个zactivity

一个activity可以配置多个intent-filter
还可以在intent-filter下指定data
<data android:scheme="itcast" android:host="cn.itcast" 
android:path="/gaga" android:mimeType="audio/mpeg"/>
intent.setData(Uri.parse("itcast://cn.itcast/gaga"),"audio/mpeg");

隐式意图关注的几个要点:
1.动作
2.data
3.Category额外的附加参数
打<动作>3瓶酱油<data>

吃饱了撑着没事干<Category> 打3瓶酱油


intent在不同activity里面传递数据:

String name = "nihao"
Intent intent = new Intent(this,Demo2Activity.class);
intent.putExtra("name",name);
startActivity(intent);


在被激活的Demo2Activity中
//获取激活我的意图
Intent intent = getIntent();
String name = intent.getStringExtra("name");

Intent 还可传递对象
实现Serialirable或者Parcelable接口
前者:序列化到文件中(速度较慢)
后者:序列化公共的内存空间里

利用bundle批量数据传递
Bundle bundle = new Bundle();
bundle.putString("name",name);
intent.putExtras();

经典实用场景:给5556发“nihao haha”短信
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
intent.addCategory("android.intent.category.BROWSABLE");
intent.setData(Uri.parse("sms:5556"));
intent.putExtra("sms_body","nihao haha");
startActivity(intent)

说明:查看系统源代码发短信:ComposeMessageActivity
可知intent.getStringExtra("sms_body")


原创粉丝点击