android intent
android intent负责程序跳转和传递数据。如果把Activity比作积木的话,那么Intent就是胶水。也就是把不同的继母粘连起来。或者说Activity是不同的手机屏幕,而intent就是把不同的手机屏幕粘连起来的胶水。
另外,学习android intent,还要了解android activity知识,请参阅相关文档。
下图是“2Intent应用举例”图示。
步骤/方法
- 01
Intent用法 1.1启动一个特定的Activity Intent intent=new Intent(CurrentActivity.this,OtherActivity.class); startActivity(intent); 1.2启动一个未指明的Activity Intent inter=new Intent(Intent.ACTION_DIAL,Uri.parse(“tel:115-1345”)); startActivity(intent); 1.3处理一个Activity的返回值 Public void onCreate(Bundle saveInstanceState){ super.onCreate(savedInstanceState); listener1=new OnClickListener(){ public void onClick(View v){ Intent intent1=new Intent(ActivityMain.this,Activity1.class); Intent1.putExtra(“activityMain”,”数据来自activityMain”); startActivityForResult(intent1,REQUEST_CODE); } }; Listener2=new OnClickListener(){ public void onClick(View v){ setTitle(“这是在ActivityMain”); Intent intent2=new Intent(ActivityMain.this,Activity2.class); startActivity(intent2); } }; setContentView(R.layout.main); button1=(Button)findViewById(R.id.button1); button1.setOnClickListener(listener1); button2=(Button)findViewById(R.id.button2); button2.setOnClickListener(listener2); setTitle(“ActivityMain”); } @Override Protected void onActivityResult(int requestCode,int resultCode,Intent data){ If(requestCode==REQUEST_CODE){ If(resultCode==RESULT_CANCELED) setTitle(“取消”); else if(resultCode==RESULT_OK){ String temp=null; Bundle extras=data.getExtras(); If(extras!=null){ Temp=extras.getString(“store”); } setTitle(temp); } } }
- 02
Intent应用举例 Activity01.java public class Activity01 extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* 设置显示main.xml布局 */ setContentView(R.layout.main); /* findViewById(R.id.button1)取得布局main.xml中的button1 */ Button button = (Button) findViewById(R.id.button1); /* 监听button的事件信息 */ button.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { /* 新建一个Intent对象 */ Intent intent = new Intent(); /* 指定intent要启动的类 */ intent.setClass(Activity01.this, Activity02.class); /* 启动一个新的Activity */ startActivity(intent); /* 关闭当前的Activity */ Activity01.this.finish(); } }); } } Activity02.java public class Activity02 extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* 设置显示main2.xml布局 */ setContentView(R.layout.main2); /* findViewById(R.id.button2)取得布局main.xml中的button2 */ Button button = (Button) findViewById(R.id.button2); /* 监听button的事件信息 */ button.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { /* 新建一个Intent对象 */ Intent intent = new Intent(); /* 指定intent要启动的类 */ intent.setClass(Activity02.this, Activity01.class); /* 启动一个新的Activity */ startActivity(intent); /* 关闭当前的Activity */ Activity02.this.finish(); } }); } }
- 03
Android系统自带的Action介绍 3.1ACTION_MAIN Android.intent.action.MAIN,在每个AndroidManifest.xml问洞中都能看到,标记当前的Activity作为一个程序的入口。 3.2ACTION_VIEW 将数据显示给用户 3.3ACTION_DIAL 用于描述给用户打电话的动作 3.4ACTION_PICK 从特定的一组数据中进行选择数据操作 3.5ACTION_DEIT 编辑特定的数据 3.6ACTION_DELETE 删除特定的数据
- 04
与动作Action相关联的数据Data介绍 VIEW_ACTION content://contacts/1显示标示符为1的联系人的详细信息 EDIT_ACTION content://contacts/1编辑标示符为1的联系人的详细信息 VIEW_ACTION content://contacts/显示所有联系人列表 PICK_ACTION content://contacts/显示所有联系人的列表,并且允许用户在列表中选择一个联系人,然后把这个联系人返回给父Activity
- 05
Intent中其他属性介绍 类别category:它为执行动作的附加信息 数据类型type:显式指定Intent的目标组件的类名称。 组件component:指定Intent的目标组件的类名称 附加信息extras:是其他所有附加信息的集合
- 06
Android解析Intent实现 6.1直接Intent:指定了component属性的Intent或者setClass 6.2间接Intent:没有指定comonent属性的Intent。 6.3如果Intent指明了action,则目标组件的IntentFilter的action列表中就必须包含有这个action,否则不匹配 6.4如果Intent没有提供type,系统将从data中得到数据类型 6.5如果Intent中的数据不是具体内容而是URI形式的话,则将根据Intent中数据的scheme进行匹配 6.6如果Intent指定了一个或多个category,这些类别必须全部出现在组件的类别列表中。