我的android 第27天 - Intent意图

我的android 第27天 - Intent意图 

 Intent(意图是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由Intent来协助完成android各个组件之间的通讯。intent主要是用来启动其他的activity 或者serviceBroadcastReceiver,所以可以将intent理解成组件之间的粘合剂。

一、intent 表现形式

  1. 通过Context.startActivity()\startActivityForResult()Activity

  2. 通过 Context.startService() 启动一个服务,或者通过

      Context.bindService() 和后台服务交互;

  3. 通过广播方法(比如:Context.sendBroadcast()

      ,Context.sendOrderedBroadcast(), 发给broadcast receivers

二、属性设置

  1.Action(动作)

   * 系统动作

扫描二维码关注公众号,回复: 618968 查看本文章

      ACTION_CALL,ACTION_EDIT,ACTION_VIEW,ACTION_BATTERY_LOW

   * 自定义动作

      最好在前缀加包名(比如:cn.itcast.contact.SHOW_TEL

  2.Data(执行动作要操作的数据,数据用Uri表示)

  3.type(数据类型,显式指定Intent的数据类型(MIME)   

  

二、属性设置

  4.category(类别)

    *CATEGORY_DEFAULT

         *CATEGORY_BROWSABLE

         *CATEGORY_DEFAULT

         *CATEGORY_HOME

         *CATEGORY_LAUNCHER

  5.component(组件)指定目标组件的类名称

  6.extras(附加信息) 是所有附加信息的集合

三、显示意图与隐式意图

      Intent可以划分成显式意图和隐式意图。

      1. 显式意图:调用Intent.setComponent()或Intent.setClass()方法明确指定

         了组件名,显式意图明确指定了Intent应该传递给哪个组件。

      2.隐式意图:没有明确指定组件名的Intent为隐式意图。 Android系统会根据隐式意

         图中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适

         的组件来处理这个意图。

   四、intent-filter(意图过滤器)

 

五、Bundle介绍:

Bundle类用作携带数据,它类似于Map,用于存放key-value名值对形式的值。相对于Map,它提供了各种常用类型的putXxx()/getXxx()方法,如:putString()/getString()和putInt()/getInt(),putXxx()用于往Bundle对象放入数据,getXxx()方法用于从Bundle对象里获取数据。Bundle的内部实际上是使用了HashMap<String, Object>类型的变量来存放putXxx()方法放入的值:

publicfinal class Bundle implements Parcelable, Cloneable {

            ......

 Map<String, Object> mMap;

 public Bundle() {

       mMap = new HashMap<String, Object>();

        ...... }

 public void putString(String key, String value) {

      mMap.put(key, value);

 }

publicString getString(String key) {

       Object o = mMap.get(key);

        return (String) o;

        ........//类型转换失败后会返回null,这里省略了类型转换失败后的处理代码

} }

在调用Bundle对象的getXxx()方法时,方法内部会从该变量中获取数据,然后对数据进行类型转换,转换成什么类型由方法的Xxx决定,getXxx()方法会把转换后的值返回。

六、Intent附加数据的两种写法

   1. 第一种写法,用于批量添加数据到Intent:

Intentintent =new Intent();

Bundlebundle =new Bundle();//该类用作携带数据

bundle.putString("name","传智播客");

          intent.putExtras(bundle);//为意图追加额外的数据,意图原来已经具有的数据不会丢失,但key同名的数据会被替换

   2第二种写法:这种写法的作用等价于上面的写法,只不过这种写法是把数据一个个地添加进Intent,这种

        写法使用起来比较方便,而且只需要编写少量的代码。

Intentintent =new Intent();

intent.putExtra("name","传智播客");

Intent提供了各种常用类型重载后的putExtra()方法,如: putExtra(String name, String value)、 putExtra(String name, long value),在putExtra()方法内部会判断当前Intent对象内部是否已经存在一个Bundle对象,如果不存在就会新建Bundle对象,以后调用putExtra()方法传入的值都会存放于该Bundle对象,下面是Intent的putExtra(String name, String value)方法代码片断:

publicclass Intentimplements Parcelable {

privateBundle mExtras;

public Intent putExtra(String name, String value) {

        if (mExtras == null) {

            mExtras = newBundle()  }

        mExtras.putString(name, value);

        return this;  }

下载视频代码

猜你喜欢

转载自htmlunit26.iteye.com/blog/1990502