Android语言基础教程(100)Android应用核心Intent对象之数据(Data):Android Intent数据穿梭指南:让你的应用“心有灵犀”一点通

你的Android组件们,可能只差一层Intent的窗户纸。

一、Intent是什么?为什么它如此重要?

在Android世界中,人不会漫无目的地瞎逛,他们所做的大部分事情——比如看电视、购物、编写下一个杀手级App——都带有特定的目的或者意图。Android也是同样的,而实现这种“目的”或“意图”的机制,就叫做Intent。

简单来说,Intent是Android应用中连接三个核心组件——Activity、Service和BroadcastReceiver的桥梁。它负责对应用中操作的动作、动作涉及数据及附加数据进行描述。

想象一下,如果没有Intent,你的App就像一支没有指挥的交响乐团——每个乐手(组件)都很优秀,但无法协同演奏出美妙的音乐。

二、Intent数据传递的两种方式:Data属性 vs Extra属性

很多Android新手常常会混淆Intent中的Data属性和Extra属性,它们虽然都用于传递数据,但有着本质的区别。

2.1 Data属性:Intent的“核心使命”

Data属性用于完成对Intent消息中数据的封装,描述Intent动作所操作数据的URI(Uniform Resource Identifier,通用资源标识符)及MIME(多用途互联网邮件扩展)类型。

它通常与Action属性配合使用,告诉系统“我要对什么数据执行什么操作”。比如查看一个网页、编辑一个联系人、拨打一个电话等。

2.2 Extra属性:Intent的“随身行李”

相比之下,Extra属性更像是一个随身携带的背包,用于在多个Action之间进行数据交换。Extra可以被当作一个Bundle对象,存入多组key-value对(键-值对)。

当你需要在Activity之间传递一些用户ID、设置参数或者其他业务数据时,Extra属性就派上了用场。

那么,什么时候该用Data,什么时候该用Extra呢?

问自己一个问题:这个数据是操作的核心对象,还是辅助信息?如果是核心对象,比如你要查看的网页URL、要拨打的电话号码,用Data;如果是辅助信息,比如用户昵称、页面主题颜色,用Extra。

三、深度解析Data属性:不只是个URI

3.1 Data属性的结构

Data属性接受一个Uri对象,其标准格式为:scheme://host:port/path

例如:

  • content://com.android.contacts/contacts/1(查看ID为1的联系人)
  • tel:123(拨打123电话)
  • http://www.example.com(查看示例网站)

其中,port部分常常被省略,contacts/1是path部分。

3.2 Data与Type的“相爱相杀”

Data属性有一个亲密伙伴——Type属性,用于指定Data所指定Uri对应的MIME类型(如"text/plain"、"image/jpeg"等)。

但它们的关系有点“别扭”——如果你分别设置Data和Type,后设置的会覆盖先设置的!看看这个例子:

// Type属性被Data覆盖
public void overrideType(View source){
    Intent intent = new Intent();
    intent.setType("abc/xyz");
    intent.setData(Uri.parse("lee://www.baidu.com:80/test"));
    // 最终只有Data生效
}

// Data属性被Type覆盖  
public void overrideData(View source){
    Intent intent = new Intent();
    intent.setData(Uri.parse("lee://www.baidu.com:80/test"));
    intent.setType("abc/xyz");
    // 最终只有Type生效
}

正确的姿势是使用setDataAndType()方法同时设置两者:

// 同时设置Data和Type
public void dataAndType(View source){
    Intent intent = new Intent();
    intent.setDataAndType(
        Uri.parse("lee://www.baidu.com:80/test"), "abc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值