(三)Android Intent和IntentFilter整理笔记

本文详细介绍了Android中Intent的作用及其属性,包括component、Action、Category、Data、Type、Extra和Flag,并解释了如何使用这些属性启动Activity、Service和BroadcastReceiver。此外,还讨论了显式Intent和隐式Intent的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      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添加一些额外的控制旗标



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值