Intent的属性及Intent-filter配置——实例Action、Data属性启动系统Activity
一旦为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_VIEW tel:123:显示向指定号码123拨号的界面。
- ACTION_DAL tel:123:显示向指定号码123拨号的界面。
- ACTION_VIEW content://contacts/people/:显示所有联系人列表的信息,通过这种组合可以非常方便地查看系统联系人。
下面的程序示范通过同时为Intent指定Action、Data属性来启动特定程序并操作相应的数据。下面的程序的界面很简单,它只包含两个按钮,其中一个按钮用于浏览指定网页,一个按钮用于编辑指定联系人信息。
package com.example.studyintent; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class ActionData extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_action_data); Button bn=(Button)findViewById(R.id.bn); //为bn按钮添加一个监听器 bn.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub //创建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) { // TODO Auto-generated method stub //创建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) { // TODO Auto-generated method stub //创建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); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.action_data, menu); return true; } }
运行上面的程序,单击第一个按钮,该按钮单击时启动Intent(Action=Intent.ACTION_VIEW,Data=http://www.crazyit.org)对应的Activity,将看到打开www.crazyit.org的界面,如图5.13所示。
单击第二个按钮,该按钮单击时启动Intent(Action=Intent.ACTION_EDIT,Data=content://com.android.contacts/contacts/1)对应的Activity,将看到编辑标识为1的联系人的界面。
单击第三个按钮,该按钮单击时启动Intent(Action=Intent.ACTION_DIAL,Data=tel:13800138000)对应的Activity,将看到程序向13800138000拨号的界面,如图5.15所示。