Intent的Action、Category属性都是一个普通的字符串,其中Action代表Intent所要完成的一个抽象“动作”,而Category则用于为Action增加额外的附加类别信息,通常Action属性与Category属性结合使用。若创建一个Intent时,会默认启动Category属性值为Intent.CATEGORY_DEFAULT常量(android.intent.category.DEFAULT)的组件。
Data属性通常用于向Action属性提供操作的数据,Data属性接受一个Uri对象,一个Uri对象通过如下形式的字符串来表示:
content://com.android.contacts/contacts/1
tel:123
冒号前面指定了数据的类型,后面的是数据部分。
Type属性则用于明确指定Data属性的数据类型或MIME类型,但是通常来说,当Intent不指定Data属性时Type属性才会起作用,否则Android系统将会根据Data属性值来分析数据的类型,所以无需指定Type属性。
一旦为Intent同时指定了Action和Data属性,那么Android将可根据指定的数据类型来启动特定的应用程序,并对指定的数据执行相应的操作。下面是几个Action属性、Data属性的组合:
ACTION_VIEW content://com.android.contacts/contacts/1:显示标识为1的联系人的信息
ACTION_EDIT content://com.android.contacts/contacts/1:编辑标识为1的联系人的信息
ACTION_DIAL content://com.android.contacts/contacts/1:显示向标识为1的联系人拨号的界面
ACTION_DIAL tel:123 显示向指定号码124拨号的界面
ACTION_VIEW content://contacts/people:显示所有联系人列表的信息
代码示例:
public class DataAttr extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button bn = (Button)findViewById(R.id.bn);
//为bn按钮添加一个监听器
bn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
//创建Intent
Intent intent = new Intent();
String data = "http://www.crazyit.org";
//根据指定字符串解析出Uri对象
Uri uri = Uri.parse(data);
//为Intent设置Action属性
intent.setAction(Intent.ACTION_VIEW);
//设置Data属性
intent.setData(uri);
startActivity(intent);
}
});
Button edit = (Button)findViewById(R.id.edit);
//为edit按钮添加一个监听器
edit.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
//创建Intent
Intent intent = new Intent();
//为Intent设置Action属性(动作为:编辑)
intent.setAction(Intent.ACTION_EDIT);
String data = "content://com.android.contacts/contacts/1";
//根据指定字符串解析出Uri对象
Uri uri = Uri.parse(data);
//设置Data属性
intent.setData(uri);
startActivity(intent);
}
});
Button call = (Button)findViewById(R.id.call);
//为edit按钮添加一个监听器
call.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
//创建Intent
Intent intent = new Intent();
//为Intent设置Action属性(动作为:拨号)
intent.setAction(Intent.ACTION_DIAL);
String data = "tel:13800138000";
//根据指定字符串解析出Uri对象
Uri uri = Uri.parse(data);
//设置Data属性
intent.setData(uri);
startActivity(intent);
}
});
}
}
Extra属性通常用于在多个Action之间进行数据交换,Intent的Extra属性值应该是一个Bundle对象,其实就像一个Map对象,可以存入多组key-value对,然后用于数据交换。