Android SDK 开发之 Intent 和 Intent Filter
2010-03-23 04:12:00 来源:WEB开发网一个intent filter是IntentFilter类的实例, 但是它一般不出现在代码中,而是出现在android Manifest文件中, 以《intent-filter》的形式. (有一个例外是broadcast receiver的intent filter是使用 Context.registerReceiver()来动态设定的, 其intent filter也是在代码中创建的.)
一个filter有action, data, category等字段. 一个隐式intent为了能被某个intent filter接受, 必须通过3个测试. 一个intent为了被某个组件接受, 则必须通过它所有的intent filter中的一个.
Action 测试
《intent-filter . . . 》
《action android:name="com.example.project.SHOW_CURRENT" /》
《action android:name="com.example.project.SHOW_RECENT" /》
《action android:name="com.example.project.SHOW_PENDING" /》
. . .
《/intent-filter》
一个intent对象只能指定一个action, 而一个intent filter可以指定多个action. action列表不能为空, 否则它将组织所有的intent.
一个intent对象的action必须和intent filter中的某一个action匹配, 才能通过.
如果intent filter的action列表为空, 则不通过.
如果intent对象不指定action, 并且intent filter的action列表不为空, 则通过.
Category 测试
《intent-filter . . . 》
《category android:name="android.intent.category.DEFAULT" /》
《category android:name="android.intent.category.BROWSABLE" /》
. . .
《/intent-filter》
注意前面说到的对于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
更多精彩
赞助商链接