Android:Intent(一):Intent详解

Intent详解

    Intent封装Android应用程序需要启动某个组件的"意图",这里的"意图"即是操作。

    它还是应用程序组件之间通信的重要媒介。

    将"意图"封装的好处是程序只是想启动某种特征的组件,并不想和某个具体的组件耦合。

    Intent可以启动Activity,Service,BroadcastReceiver的意图,不同组件有不同启动意图的方法。如下:


Intent启动不同组件的方法:

组件启动方法
ActivityStrtActivity(Intent intent)
 StrtActivityForResult(Intent intent,int requestCode)
ServiceComponentName startService(Intent service)

boolean bindService(Intent service,ServiceConnection conn,int flags)
BroadcastReceiversendBroadcast(Intent intent)

sendBroadcast(Intent intent,String receiverPermission)

sendOrderdBroadcast(Intent intent,

                                  String receiverPermission,

                                  BroadcastReceiver resultReceiver,

                                  Handler scheduler,

                                  int initialCode,

                                  String initialData,

                                  Bundle initalExtras)


sendorderedBroadcast(Intent intent,String receiverPermission)

sendStickyBroadcast(Intent intent)

sendStickOrderedBroadcast(Intent intent,

                                            BroadcastReceiver resultReceiver,

                                            Handle scheduler,

                                            int initialCode,

                                            String initialData,

                                            Bundle initialExtras)


Intent属性

    Intent大致包含以下几个属性:

        1.Compoent:用于明确指定需要启动的目标组件。 

        2.Action:抽象动作。

        3.Category:为Action增加额外的附加类别信息。

        4.Data:向Action提供操作的数据。

        5.Type:用于指定该Data所指定Uri对应的MIME类型。

        6.Extra:用于多个Action之间进行数据交换。

        7.Flag:用于为该Intent添加一些额外的控制旗标。

        以上的7种属性都有对应的方法:setXXXXX和getXXXXX,来设置和取得属性值,其中Data和Type

        的值会相互覆盖,即如果先设置Data的值,后设置Type的值,Data的值会被Type的值覆盖,反过来

        也是这样,想既有Data的值也有Type的值,那么就要调用Intent的setDataAndType()方法。


Intent和隐式Intent

    1.显示Intent:在代码中指定了具体属性来设置Intent的,这种是显式Intent。

// 显式创建Component
Component comp = new ComponentName(类名.this,类名.class);
// 创建Intent
Intent intent = new Intent();
// 设置属性值
intent.setComponent(comp);
startActivity(intent);

    2.隐式Intent:没有指定具体属性,应用程序会根据Intent指定的规则去启动符合条件的组件。


隐式Intent的规则

    Activity配置中的<Intent-filter.../>元素中配置了该Activity所能"响应"的Intent。其中每个属性都有

    对应的XML子元素,其中:

        1.Action 对应 0~N个<action.../>子元素,一个Intent只能有一个Action

        2.Category 对应 0~N个<category.../>子元素,一个Intent可以有多个Category

        3.Data 对应 0~N个<data.../>子元素,Type属性也是通过这个子元素设置的,其表现为

         <data android:mimeType>

    当配置以上的属性子元素后,在调用设置属性方法setXXXXX的时候直接传入XML子元素的属性字符串,最后

    调用startActivity(intent)即可启动响应的Intent!


隐式Intent的使用

    Activity配置有以下Intent规则:

<intent-filter>
    <!-- 指定该Activity能响应action为指定字符串的Intent -->
    <action android:name="包名.intent.action.XXXXX_ACTION">
    <!-- 指定该Activity能响应category为指定字符串的Intent -->
    <category android:name="包名.intent.category.XXXXX_CATEGORY">
    <!-- 指定该Activity能响应category为指android.intent.category.DEFAULT的Intent -->
    <category android:name="android.intent.category.DEFAULT">
</intent-filter>

    在代码中使用以上定制规则的Intent:

Intent intent = new Intent();

// 设置Action值,设置的值是规则中制定的值
intent.setAction(类名.XXXXX_ACTION);
// 设置Category值,设置的值是规则中制定的值
intent.setCategory(类名.XXXXX_CATEGORY);

// 执行意图
startActivity(intent);


转载于:https://my.oschina.net/Ccx371161810/blog/263739

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值