(三)Android Intent和IntentFilter整理笔记

来源:互联网 发布:农村村淘宝服务站 编辑:程序博客网 时间:2024/05/21 10:51

      Intent对象的作用:用于组件之间交换信息,例如两个Activity可以把需要交换的数据封装成Bundle对象,然后使用Intent来携带Bundle对象,这样就实现了两个Activity之间的数据交换。当然Intent还能启动Service和BroadcastReceiver。三大组件使用Intent的常用方法:

startActivity(Intent intent);startActivityForResult(Intent intent,int requestCode);ComponentName startService(Intent service);sendBroadcast(Intent intent);
具体的使用方法可以参考api:android.content.Intent 

关于Intent属性的相关整理:

1.Intent大致包含三种属性:component,Action,Category,Data,Type,Extra和Flag;

      1.1关于component属性:component属性需要接受一个componentname对象:


ComponentName comp=new ComponentName(Context context,XXX.class);//XXX.class表示当前Context所在包下的组件,这个函数创建了一个ComponentName对象Intent intent=new Intent();intent.setComponent(cmp);

   但是我们常常可以对上述的内容进行简化:

Intent intent=new Intent(Context context,XXX.class);//这两种表示的方法其实都为Intent 设置了component属性。


根据Component属性我们就可以将Intent分为显示Intent和隐式Intent:

    显式Intent:明确指定了Component属性,也就是明确指出了将要启动的是哪个组件,上面的例子就是显式Intent的表示方法;

    隐式Intent:需要根据action,category,type,data等信息进行匹配,没有指定component属性的Intent.

    

  

     1.2Action和Category属性与Intent-filter配置

 
Intent intent=new intent();intent.setAction(Context.XXXX);intent.addCategory(Context.XXXX);
       其中Context.XXX是一个普通字符串,可以是用户自定义的Action/Category字符串(这需要在<intent-filter...../>添加想要的<action.../>和<category..../>子元素);也可以是Android内部提供的Action/Category常量。注意:一个Intent对象最多只能包括一个Action属性,但可以包括多个Category属性。addCategory(),没有时为默认CATEGORY_DEFAULT。在这里可以比较常用的action常量:action常量

       Action是一个抽象动作,这个字符串本身并不管由哪个组件来执行,或是怎样执行的问题,只是抽象动作本身,必须由<intent-filter.../>元素进行配置。而当程序通过Intent的Component属性启动某个组件时,被启动的组件几乎不需要使用<intent-filter.../>元素进行配置。

intent-filter标签有三个子元素:

     0~N <action../>
     0~N <category.../> 
     0~1 <data.../>
<intent-filter>   <action android:name="  "/>   <category android:name=" "/>   <category android:name="android.intent.category.DEFAULT"/></intent-filter>

    

     1.3 Data、Type属性与Intent-filter配置

          1.Data属性通常用于向Action属性提供操作的数据,Intent.setType(String XXXX);   Data属性通常接受一个Uri对象,而Uri字符串满足scheme://host:post/path
        2.Type属性用于指定该Data所指定的URI对象对应的MIME类型 。Intent.setData(String XXXX); 
   注意:当Intent.setType(String XXXX);和Intent.setData(String XXXX); 同时出现时,后面一个后覆盖前面一个设置。如果需要同时设置这两个属性的话,需要使用setTypeAndData();
         
        3.为组件声明Data,Type属性都通过<data.../>标签。
        <data..../>元素支持如下属性:
       mimeType:声明该Intent所能匹配的Type属性;
       scheme:对应Data属性的scheme部分;
       host,post,path:分别对应Data的host,post,path部分;
       注意:当只有post属性而没有host属性,或是只有path,那么这两个属性将会失效,也就是说,即使Intent与他们匹配也是没有用的。
       
        4.在匹配的时候,只要Intent的属性与<data.../>子元素指定的属性匹配就可以启动该组件。


1.4Extra属性通常用于在多个Action之间进行数据交换

1.5Flag属性用于为Intent添加一些额外的控制旗标



0 0
原创粉丝点击