Android组件之间的信使Intent

        Intent的中文意思是“意图,意向”,可以把它理解为不同组件之间的通信“媒介”或者“信使”。Intent可以启动一个Activity,也可以启动一个service,还可以发起一个广播(Broadcast)。Intent由以下几个部分组成:动作(Action)、数据(Data)、分类(Category)、类型(Type)、组件(Component)和扩展信息(Extra)。通过这些可以启动其他组件并携带信息。Intent在寻找目标组件时有两种方法:第一,通过组件名称指定;第二,通过Intent Filter过滤指定。

1、Intent的ComponentName属性

        Intent的查找组件策略,其中一种方法就是显式查找,就是直接通过组件名称(Component Name)来查找。Intent的组件名称对象由ComponentName类封装,组件名称包含包名称和类名称,被声明在AndroidManifest.xml文件中。组件名称通过setComponent (ComponentName component)、setClass (Context packageContext, Class<?> cls)、setClassName (Context packageContext, String className)、setClassName (String packageName, String className)设置。

        如在FirstActivity通过组件名称启动SecondActivity实现如下:

				//实例化组件名称
				ComponentName cn = new ComponentName(FirstActivity.this, "com.igood.test.SecondActivity");
				//实例化Intent对象
				Intent intent = new Intent();
				//为Intent设置组件名称属性
				intent.setComponent(cn);
				//启动Activity
				startActivity(intent);
2、Intent的Action属性

        Action是指Intent要完成的动作,是一个字符串常量。在Intent类里面定义了大量常量属性,例如:ACTION_CALL(打电话)、ACTION_EDIT(编辑数据)、ACTION_BATTERY_LOW(电量低广播Action)等。使用getAction来获得Intent的Action属性。

2.1、自定义Action属性

        我们可以为Intent定义一个Action属性来访问,Action属性是一个字符串,我们在程序中定义,并在要访问的组件(例如Activity)的IntentFilter中声明就可以使用了。如下面演示在FirstActivity中自定义一个Intent Action属性,并通过这个属性启动SecondActivity。

        在FirstActivity类的顶部声明Action属性字符串常量,在Button的单击监听器方法中创建Intent,设置Action属性,并启动Activity。

	public static final String MY_ACTION = "com.igood.test.MY_ACTION";

				//实例化Intent对象
				Intent intent = new Intent();
				//为Intent设置Action属性
				intent.setAction(MY_ACTION);
				//启动Activity
				startActivity(intent);
        在AndroidManifest.xml配置文件中的SecondActivity声明中,在IntentFilter元素中指定Action属性。

2.2、访问系统Action属性

        Android Intent类中定义了很多Action属性常量,这些有标准Activity的和Broadcast Receiver的。标准Activity Action如下表所示:

常量名称

常量值

意义

ACTION_MAIN

android.intent.action.MAIN

应用程序的入口

ACTION_VIEW

android.intent.action.VIEW

显示数据给用户

ACTION_ATTACH_DATA

android.intent.action.ATTACH_DATA

指明附加给其他地方的一些数据

ACTION_EDIT

android.intent.action.EDIT

显示可编辑的数据

ACTION_PICK

android.intent.action.PICK

选择数据

ACTION_CHOOSER

android.intent.action.CHOOSER

显示一个Activity选择器

ACTION_GET_CONTENT

android.intent.action.GET_CONTENT

获得内容

ACTION_DIAL

android.intent.action.DIAL

显示打电话面板

ACTION_CALL

android.intent.action.CALL

直接打电话

ACTION_SEND

android.intent.action.SEND

直接发短信

ACTION_SENDTO

android.intent.action.SENDTO

选择发短信

ACTION_ANSWER

android.intent.action.ANSWER

答应电话

ACTION_INSERT

android.intent.action.INSERT

插入数据

ACTION_DELETE

android.intent.action.DELETE

删除数据

ACTION_RUN

android.intent.action.RUN

运行数据

ACTION_SYNC

android.intent.action.SYNC

同步数据

ACTION_PICK_ACTIVITY

android.intent.action.PICK_ACTIVITY

选择Activity

ACTION_SEARCH

android.intent.action. SEARCH

搜索

ACTION_WEB_SEARCH

android.intent.action.WEB_SEARCH

Web搜索

ACTION_FACTORY_TEST

android.intent.action.FACTORY_TEST

工厂测试入口点


        例如,我们实现一个发短信的程序,在这个程序中,我们需要选择对方的电话号码,这时候我们可以调用系统电话本来查找电话号码。我们可以使用Intent.ACTION_GET_CONTENT常量调用系统Activity来实现该功能。

		//创建Intent
		Intent intent = new Intent();
		//设置Intent Action属性
		intent.setAction(Intent.ACTION_GET_CONTENT);
		//设置Intent Type属性
		intent.setType("vnd.android.cursor.item/phone");
		//启动Activity
		startActivity(intent);
3、Intent的Data属性
        Intent的Data属性是执行动作的URI和MIME类型,不同的Action有不同的Data数据指定。例如,ACTION_EDIT Action应该和要编辑的文档URI Data匹配,ACTION_VIEW应该和要显示的URI匹配。

Action属性

Data属性

说明

ACTION_VIEW

content://contacts/people/1

显示_id为1的联系人信息

ACTION_DIAL

content://contacts/people/1

将_id为1的联系人电话号码显示在拨号界面中

ACTION_VIEW

tel:123

显示电话为123的联系人信息

ACTION_VIEW

http://www.google.com

在浏览器中浏览该网址

ACTION_VIEW

file://sdcard/mymusic.mp3

播放MP3

ACTION_VIEW

geo:39.3256.116.2312

显示地图

        例如,查看_id为1的联系人信息

		//创建Intent
		Intent intent = new Intent();
		//通过Uri字符串获得Uri实例
		Uri uri = Uri.parse("content://contacts/people/1");
		//设置Intent的Action属性
		intent.setAction(Intent.ACTION_VIEW);
		//设置Intent的data属性
		intent.setData(uri);
		//启动Activity
		startActivity(intent);
4、Intent的Category属性

        Intent中的Category属性是一个执行Action附加信息。例如,CATEGORY_LAUNCHER意味着在加载程序时,Activity出现在最上面。还有CATEGORY_HOME则表示回到Home界面。

		//创建Intent
		Intent intent = new Intent();
		//设置Intent的Action属性
		intent.setAction(Intent.ACTION_MAIN);
		//设置Intent的data属性
		intent.addCategory(Intent.CATEGORY_HOME);
		//启动Activity
		startActivity(intent);
4、Intent的Extras属性
        Intent中的Extras属性是添加一些组件的附近信息。例如,如果我们要通过一个Activity来发送一个E-Mail,就可以通过Extras属性来添加subject和body。
		//邮件目标地址
		String to = toEditText.getText().toString();
		//邮件主题
		String subject = subjectEditText.getText().toString();
		//邮件内容
		String content = contentEditText.getText().toString();
		//创建Intent
		Intent emailIntent = new Intent(Intent.ACTION_SEND);
		//设置内容类型
		emailIntent.setType("plain/text");
		//设置额外信息
		emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{to});
		emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
		emailIntent.putExtra(Intent.EXTRA_TEXT, content);
		//启动Activity
		startActivity(emailIntent);



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值