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