Intent详细介绍及使用实例

来源:互联网 发布:linux shell exec 编辑:程序博客网 时间:2024/05/15 22:58

一个Android程序通常有多个组件构成。如果要从一个Activity切换到另一个,必须用Intent来激活。实际上,Activity,Service和Broadcast Receiver这三种核心组件都需要使用Intent来激活。

  1. Intent对象可以传递给startActivity() 或startActivityForResult()方法来启动一个activity,或让一个已经存在的Activity去做其他任务。Intent也可以作为Activity.setResult() 的参数,返回给调用了startActivityForResult()的Activity。
  2. Intent对象可以传递给Context.startService()方法来初始化一个service或者向一个已经存在的service传递新的指令。类似的,传递给Context.bindService()方法可以在调用所在的组件和目标service之间建立一种连接。它可以有选择的初始化没有运行的服务
  3. Intent对象可以传递给Context.sendBroadcast(),Context.sendOrderedBroadcast(),或 Context.sendStickyBroadcast()等广播方法,使其发送给所有感兴趣的Broadcast Receiver

在Intent对象中应该包含如下信息:

  1. Component name(组件名称):组件名称通过setComponent(),setClass(),setClassName()设置,通过getComponent()获取。需要注意的是Componentname是一个可选项,如果被设置,那么Intent对象就显式指定了要转向的组件,如果没有被设置,则Intent对象需要根据其他信息进行筛选查找。
  2. Action(动作):Action是指Intent要完成的动作,是一个字符串常量。Intent类中定义了一系列动作常量,包括Activity和Broadcast两类。在Activity中标准动作最常用的是ACTION_MAIN(初始Activity,没有数据)和ACTION_EDIT(将数据显示给用户用于编辑),使用startActivity()启动。在标准广播动作中,通常使用registerRecevier()或者在配置文件中的<receiver>标签。Intent对象中的动作使用setAction()设置,使用getAction()读取
  3. Data(数据):Data表示操作数据的URI和MIME类型,不同的动作有不同的数据规格。数据类型也可以显式指定,比如setData()方法指定数据为URI,setType() 指定为MIME类型,setDataAndType() 可以同时设置URI和MIME类型。读取的时候URI用getData(),MIME用getType()。
  4. Category(种类):Category是一个字符串,其中包含了能够处理这个Intent对象的组件类型的附加信息。addCategory()将种类添加到Intent中,removeCategory()将种类从Intent中移除上次添加的种类和getCategories()获取所有种类。
  5. Extras(额外):传递给Intent的额外数据,以Bundle的形式定义,就是一些键值对。Intent对象有一系列的putXXX()函数用于放入各种数据类型,相应的也有一系列的getXXX()函数用于读取数据。实际上,数据可以被作为一个Bundle对象被使用,利用 putExtras() 和 getExtras() 方法。
  6. Flags(标记):用来指定Android系统如何启动activity,还有启动了activity后如何对待它。所有这些都定义在Intent类中。所有标记都是正整数

Intent使用实例:


A 无参数Activity跳转

Intent intent = new Intent(MainActivity.this,DetailActivity.class);

startActivity(intent);


B 向下一个Activity传递数据

         方法一:

MainActivity:         Intent intent = newIntent(MainActivity.this, RegisterActivity.class);

                                     Bundlebundle = new Bundle();

                                     bundle.putCharSequence("user",user);

                                     intent.putExtras(bundle);

                                     startActivity(intent);

 

RegisterActivity:   Intent intent = getIntent();

                                      Bundle bundle = intent.getExtras();

                                     TextViewuser = (TextView)findViewById(R.id.user);

                                     user.setText("用户名:"+bundle.getString("user"));

         方法二:

MainActivity:         Intent intent = newIntent();

                                     Intent.setAction(Intent.ACTION_VIEW);

                                     startActivity(intent);

RegisterActivity:   就一个自然生成的布局文件。

AndroidManifest.xml在传递过去的SecondActivity中要说明

                            <actionandroid:name=”android:intent:action.VIEW”/>


C 回调函数

MainActivity:  

                   final int CODE = 0x717;

                   startActivityForResult(intent,CODE);

                   protected void onActivityResult(int requestCode, int resultCode, Intent data) {

                                     // TODOAuto-generated method stub

                                     super.onActivityResult(requestCode,resultCode, data);

                                     if(requestCode == CODE && resultCode == CODE ){

                                     }

                            }

RegisterActivity:

                   Button bn =(Button)findViewById(R.id.back);

                   bn.setOnClickListener(newOnClickListener(){

                            @Override

                            public voidonClick(View v) {

                                     // TODOAuto-generated method stub

                                     setResult(0x717,intent);

                                     finish();

                            }

                   });


参考:

http://www.cnblogs.com/mengdd/archive/2013/03/18/2965839.html

0 0
原创粉丝点击