Android的Intent&IntentFilter Intent属性及Intent-filter配置

Android使用Intent来封装程序的调用意图,利于高层次解耦
三种重要组件:Activity、Service、BroadcastReceiver
Intent包含Component、Action、Category、Data、Type、Extra和Flag这7种属性


Component
Intent的Component属性需要接受一个ComponentName对象,ComponentName对象包含如下构造器:
  • ComponentName(String pkg, String cls):创建pkg所在包下cls类所对应的组件
  • ComponentName(Context pkg, String cls):创建pkg所对应的包下的cls类所对应的组件
  • ComponentName(Context pkg,Class<?> cls):创建pkg所对应的包下的cls类所对应的组件
Intent还包含如下方法:
  • setClass(Context packageContext,Class<?> cls):设置该Intent将要启动的组件对应的类
  • setClassName(Context packageContext, String className):设置该Intent将要启动的组件对应的类名
  • setClassName(String packageName, String className):设置该Intent将要启动的组件对应的类名


Action、Category与Intent-filter配置
Action代表Intent所要完成的抽象动作,Category则用于为Action增加额外的附加类别信息(Action并不指定哪个组件响应)
Action:Intent.ACTION_VIEW并不知道——这取决于Activity的<intent-filter.../>配置,只要某个Activity的<intent-filter.../>配置中包含了该ACTION_VIEW,该Activity就有可能被启动
每个Intent只能指定一个Action(setAction()),但可以指定多个Category要求(addCategory());
每个组件可以声明自己满足多个Action要求、可满足多个Category要求。只要某个组件能满足>=Intent所指定的要求,那么该Intent就能启动该组件


系统Action、category
setAction()
addCategory()


Data、Type属性 与 intent-filter配置
Data属性通常用于向Action属性提供操作的数据。Data属性接受一个Uri对象,一个Uri对象通常通过如下形式表示:
content://com.android.contacts/ contacts/1
tel:123
Uri字符串总满足如下格式:
scheme://host:port/ path
Type属性用于指定该Data所指定Uri对应的MIME类型,这种MIME类型可以是
  • 无论先设置Type还是Data,两者一定会被后设置的一项覆盖,若想Intent同事拥有这两种属性,则应该调用Intent的setDataAndType()方法
在AndroidManifest.xml文件中为组件声明Data、Type属性都通过<data.../>元素进行,格式如下:
< data
     android:mimeType = ""
     android:scheme = ""
    
android:host = ""
    
android:port = ""
    
android:path = ""
    
android:pathPrefix = ""
     android:pathPattern=""
/>
Intent 的Type 属性也用于指定该Intent的要求,必须对应组件中<intent-filter.../>元素中<data.../>子元素的mime Type属性与此相同,才能启动该组件
Intent 的Data 属性则不同,为Intent指定Data时,目标组件已定义部分<data.../>子元素必须与Intent的Data属性完全相同(当然,目标组件可能只定义了部分子元素)scheme;scheme、host;scheme、host、port(可省略)、path;


Extra 属性
用于多个Action之间交换数据,是一个Bundle对象,Bundle对象就像一个Map对象,可以存入多组key-value对,这样就棵通过Intent在不同Activity之间交换数据

Flag属性
添加额外的控制旗标,调用addFlags()添加
Intent包含如下常用Flag旗标:
FLAG_ACTIVITY_BROUGHT_TO_FRONT
FLAG_ACTIVITY_CLEAR_UP
FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_NO_ANIMATION
FLAG_ACTIVITY_NO_HISTORY
FLAG_ACTIVITY_REORDER_TO_FRONT
FLAG_ACTIVITY_SINGLE_TOP


用Intent创建Tab页面
之前已接触TabActivity.添加Tab页面使用了
setContent(int viewId)
setContent(Intent intent)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值