Intent Android 详解
2010-09-21 01:45:00 来源:WEB开发网核心提示:filter中的一个. Action 测试 . . . 一个intent对象只能指定一个action, 而一个intent filter可以指定多个action. action列表不能为空, 否则它将组织所有的intent. 一个intent对象的action必须和intent filter中的某一个action匹配,
filter中的一个. Action 测试 . . . 一个intent对象只能指定一个action, 而一个intent
filter可以指定多个action. action列表不能为空, 否则它将组织所有的intent. 一个intent对象的action必须和intent
filter中的某一个action匹配, 才能通过. 如果intent filter的action列表为空, 则不通过.
如果intent对象不指定action, 并且intent filter的action列表不为空, 则通过. Category 测试 . . .
注意前面说到的对于action和category的常数是在代码中用的,而不是manifest文件中用的. 例如,
CATEGORY_BROWSABLE常数对应xml中的表示为"android.intent.category.BROWSABLE".
一个intent要通过category测试, 那么该intent对象中的每个category都必须和filter中的某一个匹配. 理论上来说,
一个intent对象如果没有指定category的话, 它应该能通过任意的category 测试. 有一个例外:
android把所有的传给startActivity()的隐式intent看做至少有一个category:
"android.intent.category.DEFAULT". 因此, 想要接受隐式intent的activity必须在intent
filter中加入"android.intent.category.DEFAULT". ("android.intent.action.MAIN"
和"android.intent.category.LAUNCHER"的intent filter例外.
它们不需要"android.intent.category.DEFAULT".) Data test . . . 每个元素指定了一个URI和一个数据类型.
URI每个部分为不同的属性 -- scheme, host, port, path: scheme://host:port/path 例如, 在如下的URI中:
content://com.example.project:200/folder/subfolder/etc scheme为"content",
host为"com.example.project", port为"200", path为"folder/subfolder/etc".
host和port一起组成了URI authority. 如果host未指定,则port被忽略. 这些属性都是可选的,但它们并非相互独立:
要使一个authority有意义,必须指定一个scheme. 要使一个path有意义, 必须指定一个scheme和一个authority.
当intent对象中的URI和intent filter中相比较时, 它只和filter中定义了的部分比较. 例如,
如果filter中之定义了scheme,那么所有包含该scheme的URI的intent对象都通过测试.对于path来说,可以使用通配符来进行部分匹配.
元素的type属性指定了数据类型. 它在filter中比在URI中更常见. intent对象和filter都可以使用"*"通配符作为子类型.
例如"text/*" "audio/*"表示所有的子类型都匹配. data测试的规则如下:
一个不含uri也不含数据类型的intent对象只通过两者都不包含的filter.
更多精彩
赞助商链接