先回顾一下Intent:什么叫Intent,
Intent是一个将要执行的动作的抽象的描述,由Intent来协助完成android各个组件之间的通讯。比如调用Activity实例化对象的startActivity()来启动一个activity,或者由Broadcast Intent()来传递给所有感兴趣的BroadcastReceiver, 或者由startService()/bindservice()来启动一个后台的service。可见,intent主要用来启动activity或者service(并携带需要传递的参数信息),intent理解成activity之间的粘合剂。
Intent的使用方式,有以下2种:
显示调用 1:
public class Userinfo{
public int Userid;
public string Username;
}
//创建一个显式的 Intent 对象(方法一:在构造函数中指定)
Intent intent = new Intent(Intent_Demo.this, Intent_Demo1_Result.class);
Bundle bundle = new Bundle();
bundle.putString("id", strID);
intent.putExtras(bundle);
intent.putExtra("username", "test");
intent.putExtra("userInfo", new UserInfo(1, "name"));
startActivity(intent);
//创建一个显式的 Intent 对象(方法二:用 setClass 方法)
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("id", strID);
intent.setClass(Intent_Demo.this, Intent_Demo_Result.class);
intent.putExtras(bundle);
startActivity(intent);
隐式调用2:
//创建一个隐式的 Intent 对象:Action 动作
/**
* 这里指定的是 AndroidManifest.xml 文件中配置的
* <intent-filter>标签中的<action android:name="com.great.activity_intent.Intent_Demo.Result" />
* 所在的 Activity,注意这里都要设置 <category android:name="android.intent.category.DEFAULT" />
*/
Intent intent = new Intent();
//设置 Intent 的动作
intent.setAction("com.great.activity_intent.Intent_Demo.Result");
Bundle bundle = new Bundle();
bundle.putString("id", strID);
intent.putExtras(bundle);
startActivity(intent);
再看看如何调用系统的组件:
1.拨打电话 //要使用这个必须在配置文件中加入<uses-permission android:name="android.permission.CALL_PHONE"/>
Uri uri = Uri.parse("tel:13023198367");
Intent intent = new Intent(Intent.ACTION_CALL, uri);
startActivity(intent);
2.发送短信
Uri uri = Uri.parse("smsto:13023198367");
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra("sms_body", "The SMS text");
startActivity(intent);
3.发送email
Uri uri = Uri.parse(mailto:daizheng126@126.com);
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(intent);
4.播放媒体文件
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("file:///sdcard/a.mp3");
intent.setDataAndType(uri, "audio/mp3");
startActivity(intent);
多个Activity之间传值 可以通过Bundle对象存储需要传递的数据,例如:
在IntentDemoActivity里面传值,
Intent explicitIntent=new Intent(IntentDemoActivity.this, ExplicitActivity.class); //这是在Intent的构造函数中指定 EditText nameText=(EditText)findViewById(R.id.username); // 通过Bundle对象存储需要传递的数据 Bundle bundle=new Bundle(); bundle.putString("userName", nameText.getText().toString()); //把Bundle对象bundle给explicitIntent explicitIntent.putExtras(bundle); startActivity(explicitIntent);
两个个Activity之间切换
在ExplicitActivity页面上加一个返回按钮,并在事件写如下代码:
/*给上一个Activity返回结果*/
Intent intent=new Intent(ExplicitActivity.this, IntentDemoActivity.class);
//这是在Intent的构造函数中指定 ExplicitActivity.this.setResult(RESULT_OK,intent); /*结束本Activity*/ ExplicitActivity.this.finish();
这样就返回到IntentDemoActivity这个Activity去了。