Android--Intent和过滤器,从青铜到王者的路线

startActivity(intent);

只有action和Category同时匹配时,才能响应这个Intent。intent Filter中如果category没有指定,必须使用默认的。intent设置时没有添加category时为自动添加默认的category。每个Intent中只能指定一个action,但可以指定多个category。一个Intent Filter中可以包含多个action和category。

data(数据)和type(数据类型)

data是要访问的数据,用URI表示,通常情况下,使用action+data属性的组合来描述一个意图:做什么。intent Filter中声名时可以只是一个数据类型(type),一条 URI ,或者同时包括数据类型和 URI 。

setData() 方法只能以 URI 来指定数据,setType() 只能以元类型指定数据,setDataAndType() 可以同时指定 URI 和元类型。URI 通过 getData() 读取,类型通过 getType() 读取。如果Intent对象中既包含Uri又包含Type,那么,在中也必须二者都包含才能通过。

Data属性与Type属性的关系比较微妙,这两个属性会相互覆盖,例如:

如果为Intent先设置Data属性,后设置Type属性,那么Type属性将会覆盖Data属性。

如果为Intent先设置Type属性,后设置Data属性,那么Data属性将会覆盖Type属性。

如果希望Intent既有Data属性,也有Type属性,则应该调用Intent的setDataAndType() 方法。

注:

Uri字符串总满格式:scheme://host:port/path,例如content://com.android.contacts/contacts/1tel:4536,其中 content 是 scheme 部分, com.android.contacts 是 host 部分,port 部分被省略了,/contacts/1 是 path 部分。

Data属性并不要求被启动组件的<intent-filter…/>中<data…/>之元素android:scheme、android:host、android:port、android:path 完全满足。比如:

如果目标组件的<data…/>子元素只指定了 android:scheme属性,那么只要Intent的Data 属性的scheme部分与android:scheme属性值相同,即可启动该组件。

这里有两点需要注意:

如果<data…/>子元素只有android:port属性,没有指定android:host属性,那么android.port属性将不会起作

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值