Intent应用
-
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);
}
}
}
-
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();
}
});
}
}
-
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
删除特定的数据
-
与动作Action相关联的数据Data介绍
VIEW_ACTION content://contacts/1显示标示符为1的联系人的详细信息
EDIT_ACTION content://contacts/1编辑标示符为1的联系人的详细信息
VIEW_ACTION content://contacts/显示所有联系人列表
PICK_ACTION content://contacts/显示所有联系人的列表,并且允许用户在列表中选择一个联系人,然后把这个联系人返回给父Activity
-
Intent中其他属性介绍
类别category:它为执行动作的附加信息
数据类型type:显式指定Intent的目标组件的类名称。
组件component:指定Intent的目标组件的类名称
附加信息extras:是其他所有附加信息的集合
-
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,这些类别必须全部出现在组件的类别列表中