Category、Data、Type属性与intent-filter配置

时间:2021-12-24 15:42:31

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对,然后用于数据交换。