Android学习之——intent-fliter配置之data属性

Data属性通常用来向Action属性提供操作的数据。Data属性接受一个Uri对象,比如:

content://com/android.contacts/contacts/1
Uri对象满足如下格式:

scheme://host:port/path or pathPrefix or pathPattern(这里的是scheme而不是schema)

比如上面的Uri字符串,content就是scheme部分,com.android.contacts就是host部分,port就是端口,这里省略,contacts/1就是path部分。

在代码中进行定义的时候Data属性和Type属性会进行相互覆盖:

如果为intent先设置Type属性,然后设置Data属性,Type属性就会被Data属性所覆盖。

Intent intent = new Intent();
intent.setType("abc/bcd");
intent.setData(Uri.parse("http://www.baidu.com"));
Toast.makeText(MainActivity.this, intent.toString(), Toast.LENGTH_LONG).show();



如果为intent先设置Data属性,然后设置Type属性,Data属性就会被Type属性所覆盖

Intent intent = new Intent();
intent.setData(Uri.parse("http://www.baidu.com"));
intent.setType("abc/bcd");
Toast.makeText(MainActivity.this, intent.toString(), Toast.LENGTH_LONG).show();


那么,如果希望同时设置Intent的Data属性和Type属性,应调用Intent的setDataAndType()方法

Intent intent = new Intent();
intent.setDataAndType(Uri.parse("http://www.baidu.com"), "abc/bcdz");
Toast.makeText(MainActivity.this, intent.toString(), Toast.LENGTH_LONG).show();


AndroidManifest.xml中 data属性的具体格式如下:

<data 
     android:mimeType=""
     android:scheme=""
     android:host=""
     android:port=""
     android:path=""
     android:pathPrefix=""
     android:pathPattern=""/>
  • mimeType:用来设置该Data所指定的Uri对应的MIME类型,可自定义,只要符合abc/def格式即可。声明该组件所能匹配的Intent的Type属性。
  • scheme:用来声明该组件所能匹配的Intent的Data属性的scheme部分。
  • host:用来声明该组件所能匹配的Intent的Data属性的host部分。
  • port:用来声明该组件所能匹配的Intent的Data属性的port部分。
  • path:用来声明该组件所能匹配的Intent的Data属性的path部分。
  • pathPrefix:用来声明该组件所能匹配的Intent的Data属性的path前缀。
  • pathPattern:用来声明该组件所能匹配的Intent的Data属性的path字符串模版。

启动组件时的要求:

Intent的Type属性也用于指定该Intent的要求,必须对应组件中<intent-filter.../>元素中<data.../>子元素的mimeType属性与此相同,才能启动该组件。

Data属性的匹配,在匹配时,会先检查<intent-filter.../>里<data.../>的子元素:

  • 如果目标组件的<data.../>子元素只指定了android:scheme属性,那么只要Intent的Data属性的scheme部分与android:scheme属性相同,就可以启动该组件。
  • 如果目标组件<data.../>指定了android:scheme,android:host属性,则需要Intent的Data属性指定为具有相同的scheme,和host,则可以启动该组件。
  • <data.../>指定了android:scheme,android:host,android:port属性,那么Inent的Data属性要指定相同的scheme,host,port才可以启动该组件。
  • 。。。。其余相同与上面类似,不一一列举。
data子元素在配置的时候是可选的,但又是相互依存的,比如,如果没有配置scheme,那么其他所有的Uri属性都被忽略;如果host没有配置,那么port以及path,pathPrefix,pathPattern都会被忽略(不起作用)。

如果希望<data.../>子元素正常起作用,至少要在<intent-filter.../>中配置一个<action.../>子元素,该子元素的android:name可任意定义。

下面附上官方API对于data的阐释: 点击打开链接







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值