Intent对象主要用来在Android程序的Activity、Service和BroadcastReceiver这3大组件之间传输数据。Intent负责对应用中一次操作的动作、动作涉及的数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。
Intent对象的组成
- 组件名称:组件名称用来指定处理Intent对象的组件,它是一个ComponentName对象,是目标组件的完全限定类名和应用程序所在包的清单文件的名字的组合。组件名称是可选的。组件名称可以通过setComponent、setClass或setClassName方法设置,并通过getComponent方法读取。
- 动作:动作(Action)很大程度上决定了Intent如何构建,特别是数据(data)和附加(extras)信息,就像一个方法名决定了参数和返回值一样,所以应该尽可能明确地指定动作,并紧密关联到其他Intent字段。一个Intent对象的动作通过setAction方法设置,通过getAction方法读取。
- 数据:数据(data)是作用于Intent上的数据的URI和数据的MIME类型,不同的动作有不同的数据规格。如果动作是ACTOIN_CALL,数据字段应该是一个tel:URI和要拨打的号码;如果动作是ACTION_VIEW,数据字段应该是一个http:URI。使用setData方法可以指定数据的URI,使用setType方法可以指定数据的MIME类型,使用setDataAndType方法可以指定数据的URI和MIME类型,而通过设置getData方法可以读取数据的URI,通过getType方法可以读取数据的类型。
Button call = (Button) findViewById(R.id.button);// 通过ID值获得按钮对象
call.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String number = numberET.getText().toString();// 获得用户输入的电话号码
Intent intent = new Intent();// 创建Intent对象
intent.setAction(Intent.ACTION_CALL);// 为Intent设置动作
intent.setData(Uri.parse("tel:" + number));// 为Intent设置数据
startActivity(intent);// 将Intent传递给Activity
}
});
还要修改AndroidManifest.xml文件,增加拨打电话的权限:
<uses-permission android:name="android.permission.CALL_PHONE"/>
使用Intent实现发送短信的功能
Button send = (Button) findViewById(R.id.send);// 通过ID值获得按钮对象
send.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String number = numberET.getText().toString();// 获得用户输入的号码
String message = messageET.getText().toString();// 获得用户输入的短信
Intent intent = new Intent();// 创建Intent对象
intent.setData(Uri.parse("smsto:" + number)); // 设置要发送的号码
intent.putExtra("sms_body", message); // 设置要发送的信息内容
startActivity(intent);// 将Intent传递给Activity
}
});
修改 AndroidManifest.xml文件,增加发送短信的权限:
<uses-permission android:name="android.permission.SEND_SMS"/>
打开浏览器
findViewById(R.id.btnOpenBaidu).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.baidu.com"));
startActivity(intent);
}
});
- 种类(Category):组件类型信息,用来作为被执行动作的附加信息,开发人员可以在一个Intent对象中指定任意数量的种类(Category)描述。在Android程序开发中,可以使用addCategory方法添加一个种类到Intent对象中,使用removeCategory方法删除一个之前添加的种类,使用getCategory方法获取Intent对象中的所有种类。
- 附加信息:Intent对象中有一系列的put...()方法用于插入各种附加数据,一系列的get...()方法用于读取数据。
putExtras方法:为Intent添加附加信息。
getExtras方法:用来获取Intent中的附加信息,返回值为Bundle对象。
Intent intent = new Intent();// 创建Intent对象
intent.putExtra("com.mingrisoft.USERNAME", username.getText().toString());// 封装用户名信息
intent.putExtra("com.mingrisoft.PASSWORD", password.getText().toString());// 封装密码信息
intent.setClass(FirstActivity.this, SecondActivity.class);// 指定传递对象
startActivity(intent);// 将Intent传递给Activity
获取信息:
Intent intent = getIntent();// 获得Intent
String username = intent.getStringExtra("com.mingrisoft.USERNAME");// 获得用户输入的用户名
String password = intent.getStringExtra("com.mingrisoft.PASSWORD");// 获得用户输入的密码
- 标志,用来指示Android程序如何去启动一个活动(例如,活动应该属于哪个任务)和启动之后如何对待它(例如,它是否属于最近的活动列表),所有的标志都定义在Intent类中。
在Android开发中,使用setFlags方法和addFlags方法添加一个标志到Intent对象中,使用getFlags方法获取Intent对象中的所有标志。