Android SDK 开发之 Intent 和 Intent Filter
2010-03-23 04:12:00 来源:WEB开发网如果一个intent可以通过多于一个activity或者service的filter, 那么用户可能会被询问需要启动哪一个. 如果一个都没有的话, 那么会抛出异常.
Common cases 常见情况
上述的最后一个规则(d)说明了组件通常可以从文件和content provider中获取数据. 因此, 它们的filter可以只列出数据类型不列scheme. 这是个特殊情况. 下列《data》元素告诉android该组件可以从一个content provider取得图像数据并显示之:
《data android:mimeType="image/*" /》
由于大部分可用的数据由content provider提供, 指定数据类型但不指定uri的filter是最常见的情况.
另外一个常见的配置是filter具有一个scheme和一个数据类型. 例如, 下列《data》元素告诉android该component可以从网络获取图像数据并显示之:
《data android:scheme="http" android:type="video/*" /》
考虑用户点击一个网页时浏览器的动作. 它首先试图显示这个数据(当做一个html页来处理). 如果无法显示, 则创建一个隐式intent, 并启动一个可以处理它的activity. 如果没有这样的activity, 那么它请求下载管理器来下载该数据. 然后它将数据置于一个content provider的控制之下, 这样有很多activity(拥有只有数据类型的filter)可以处理这些数据.
大部分应用程序还有一种方法来单独启动, 不需要引用任何特定的数据. 这些能启动应用程序的activity具有action为"android.intent.action.MAIN" 的filter. 如果它们需要在应用程序启动器中显示, 它们必须指定"android.intent.category.LAUNCHER" 的category.
《intent-filter . . . 》
《action android:name="code android.intent.action.MAIN" /》
《category android:name="code android.intent.category.LAUNCHER" /》
《/intent-filter》
Using intent matching 使用intent匹配
intent 和intent filter相匹配, 不仅为了寻找并启动一个目标组件, 也是为了寻找设备上组件的信息. 例如, android系统启动了应用程序启动器, 该程序位于屏幕的顶层, 显示了用户可以启动的程序, 这是通过查找设备上所有的action为"android.intent.action.MAIN" ,category为"android.intent.category.LAUNCHER"的intent filter所在的activity实现的. 然后它显示了这些activity的图标和标题. 类似的, 它通过寻找
更多精彩
赞助商链接