android 基础一 <intent-filter>

走远了吗. 提交于 2020-02-28 00:33:11

<intent-filter>
<intent-filter android:icon="drawable resource"
               android:label="string resource"
               android:priority="integer" >
    <action>
    <category>
    <data>
</intent-filter>
过滤器
priority:优先级默认是0,数字遇到优先级越高
 
<action>
<action android:name="string" />
   动作
   1.<intent-filter>元素必须包含一个或多个<action>元素
   2.对于定义的操作,最好使用应用程序的包名作为前缀,以确保惟一性

<category>
<category android:name="string" />
   类别
   1.为了接收隐式意图,您必须在意图过滤器中包含CATEGORY_DEFAULT类别
   2.方法startActivity()和startActivityForResult()将所有意图视为声明了CATEGORY_DEFAULT类别。
   如果您没有在intent过滤器中声明它,就不会有隐式intent解析到您的活动。
   3.自定义类别应该使用包名作为前缀,以确保它们是惟一的。

 
android.intent.category.ALTERNATIVE :activity 是用户正在浏览的数据的一个可选操作
android.intent.category.BROWSABLE:能够被浏览器安全使用的 activities 必须支持这个类别
android.intent.category.DEFAULT:如果 activity 是对数据执行确省动作(点击, center press)的一个选项,需要设置这个类别
android.intent.category.DEVELOPMENT_PREFERENCE :activity 是一个设置面板 (development preference panel)
android.intent.category.EMBED:能够在上级(父)activity 中运行。
android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST:被用来作为测试仪器测试框架下的代码
android.intent.category.GADGET:这个 activity 可以被嵌入宿主 activity (activity that is hosting gadgets)
android.intent.category.HOME:主屏幕 (activity),设备启动后显示的第一个 activity
android.intent.category.LAUNCHER:Activity 应该被显示在顶级的 launcher 中
android.intent.category.PREFERENCE:activity是一个设置面板 (preference panel)
android.intent.category.SAMPLE_CODE:被用来作为一个示例代码示例(不是普通用户体验的部分)
android.intent.category.SELECTED_ALTERNATIVE:对于被用户选中的数据,activity 是它的一个可选操作
android.intent.category.TEST:作为测试目的使用,不是正常的用户体验的一部分
android.intent.category.UNIT_TEST:应该被用作单元测试(通过 test harness 运行)
android.intent.category.WALLPAPE:这个 activity 能过为设备设置墙纸
android.intent.category.TAB:这个 activity 应该在 TabActivity 中作为一个 tab 使用
 
<data>
<data android:scheme="string"
      android:host="string"
      android:port="string"
      android:path="string"
      android:pathPattern="string"
      android:pathPrefix="string"
      android:mimeType="string" />
URI格式:[scheme:][//host:port][path]
如:http://192.168.1.1:8080/test/aabb
scheme:
   URI的scheme部分。这是指定URI的最小基本属性;必须为过滤器设置至少一个scheme属性,否则其他URI属性都没有意义。
   比如上面的http就是scheme。
host:
   比如上面的192.168.1.1就是host
port:
   比如上面的8080就是port
path:
   用来匹配完整的路径: 比如上面的/test/aabb就是path
pathPattern:
   用表达式来匹配整个路径。
pathPrefix:
   用来匹配路径的开头部分: 比如上面的将pathPrefix 设置为/test 就能进行匹配了
mimeType:
   数据类型
   注意:与正式的RFC MIME类型不同,Android框架中的MIME类型匹配是区分大小写的。因此,您应该始终使用小写字母指定MIME类型。
   mimeType 也是是用来匹配 Intent 的。比如,当你使用 Intent.setType("text/plain") ,
   那么系统将会匹配到所有注册 android:mimeType="text/plain" 的 Activity,
   这里需要十分注意的是 Intent.setType(), Intent.setData,Intent.setDataAndType() 这三个方法!
 
   setType 调用后设置 mimeType,然后将 data 置为 null;
   setData 调用后设置 data,然后将 mimeType 置为 null;
   setDataAndType 调用后才会同时设置 data 与 mimeType。
匹配符号:
   “*” 用来匹配0次或更多,如:“a*” 可以匹配“a”、“aa”、“aaa”...
   “.” 用来匹配任意字符,如:“.” 可以匹配“a”、“b”,“c”...
    因此 “.*” 就是用来匹配任意字符0次或更多,如:“.*html” 可以匹配 “abchtml”、“chtml”,“html”,“sdf.html”...
转义:
    因为当读取 Xml 的时候,“\” 是被当作转义字符的(当它被用作 pathPattern 转义之前),
    因此这里需要两次转义,读取 Xml 是一次,在 pathPattern 中使用又是一次。
如:“*” 这个字符就应该写成 “\\*”,“\” 这个字符就应该写成 “\\\\”。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!