组件间通过Intent通信

Intent是什么,什么作用?
Intent(意图)用来实现 Android 应用的项组件间的通信。 Intent 负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android 则根据此 Intent 的描述,负责找到对应的组件,将 Intent 传递给调用的组件,并完成组件的调用。 因此,Intent 在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。
一个Intent对象包含了一组信息:
1、Component name组件名称:intent会根据component name要启动哪一个组件(Activity,Service,ContentProvider)组件名是可选的,如果设置了组件名,Intent对象就会被发送给这个指定类的实例。如果没有设置,Android系统使用Intent对象中的其他信息来定位合适的目标。通过setComponent()、setClass()或setClassName()方法来设置,并且通过getComponent()方法来读取。
2、Action(要执行的动作 (action) 的一个简要描述,如 VIEW_ACTION(查看)、EDIT_ACTION(修改) 等也可以是自定义的名字。 可以在清单文件中申明也可以在代码中通过 setAction()方法把一个分类放到一个Intent对象中。
一些常用的常量
ACTION_MAIN,Activity作为一个任务的初始Activity启动,没有数据输入和返回输出。
ACTION_CALL,Activity发起电话呼叫,
Intent intent=new Intent();intent.setAction(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:10086");startActivity(intent);
ACTION_ANSWER处理呼入的电话。
DIAL,Activity调用拨号面板
Intent intent=new Intent();intent.setAction(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:10086");startActivity(intent);
SMS_RECEIVED接收短信的action,<intent-filter><data android:host="localhost"/></intent-filter>
ACTION_EDIT,Activity为用户显示要编辑的数据
ACTION_HEADSET_PLUG,Broadcast Receiver耳麦已经被插入设备,或者从设备上拔出。
ACTION_TIMEZONE_CHANED,Broadcast Receiver时区相关的设置已经被改变
ACTION_TIME_TICK,Broadcast Receiver每分钟发送,表明时间在运行
ACTION_TIME_CHANGEDBroadcast Receiver当用户更改了设备上的时间时发送
ACTION_TIMEZONE_CHANGED,Broadcast Receiver当用更改了设备上的时区时发送
ACTION_BOOT_COMPLETEDBroadcast Receiver当设备启动完成了以后
ACTION_PACKAGE_ADDEDBroadcast Receiver当添加了新的包到设备上时发送
ACTION_PACKAGE_REMOVEDBroadcast Receiver当删除一个包时发送
ACTION_PACKAGE_CHANGEDBroadcast Receiver当包被更改时,如disable 改为
ACTION_PACKAGE_RESTARTEDBroadcast Receiver当程序被中断,重新打开的时候
ACTION_UID_REMOVEDBroadcast Receiver一个UID从系统删除的时候
ACTION_SHUTDOWNBBroadcast Receiver关机的时候
ACTION_BATTERY_LOW,Broadcast Receiver低电量的一个警告
ACTION_POWER_DISCONNECTEDBroadcast Receiver断开连接电源
ACTION_POWER_CONNECTEDBroadcast Receiver连接外部电源时
ACTION_BATTERY_CHANGEDBroadcast Receiver当电池的状态,充电改变时发送
ACTION_SCREEN_ON,Broadcast Receiver显示屏已经被打开
ACTION_CLOSE_SYSTEM_DIALOGS,当屏幕超时进行锁屏时,当用户按下电源按钮,长按或短按(不管有没跳出话框),进行锁屏时,android系统都会广播此Action消息
3、Data (执行动作要操作的数据(data),Android 中采用指向数据的一个 URI 来表示)
4、Category(被执行动作的附加信息,用于模糊的筛选过滤)可以在清单文件中申明也可以在代码中通过addCategory()方法把一个分类放到一个Intent对象中
一些常用的 Category值
CATEGORY_BROWSABLE, 目标Activity能够安全的调用浏览器来显示链接所指向的数据---如,一张图片或一封电子邮件消息。
CATEGORY_GADGETActivity, 能够被嵌入到持有小部件的另一个Activity中
CATEGORY_HOME,Activity显示在主屏幕上,在设备打开时用户看到的第一个屏幕或Home按钮被按下时,用户看到的屏幕。
CATEGORY_LAUNCHER,Activity能够作为任务的初始Activity,并且被列在应用程序启动器的顶层。
CATEGORY_PREFERENCER,目标Activity是一个首选面板。
5、Extras  其它所有附加信息的集合, 事先向一个Activity的intent中存入的键值对
	bundle.putString("key", "value");
	bundle.putLong("long,1233);
	intent.putExtras(bundle);//装入
	Bundle bundle =getIntent().getExtras();//取出
	
	intent.putExtra("title","text");//直接装入
	intent.getCharSequenceExtra("title"));//直接取出
6、Flags,标记,用于指示Android系统如何启动Activity(如,Activity应该属于哪个任务),以及启动后如何处理(如,它是否属于最近的Activity列表)。所有这些标记都在Intent类中定义。

如何使用Intent?
对于每种组件来说,激活的方法是不同的:
传递一个Intent对象至 Context.startActivity ()或Activity .startActivity ForResult()以载入 一个Activity
Activity 可以通过调用 getIntent() 方法来查看激活它的intent。
Android通过调用Activity 的onNewIntent()方法来传递给它继发的intent。

传递一个Intent对象至Context.startService()将启动一个服务(或给予正在运行的服务以一个新的指令)
Android调用服务的 onStart()方法并将Intent对象传递给它。
一个Intent可以被调用组件传递给 Context.bindService()以获取一个正在运行的目标服务的连接。这个服务会经由onBind() 方法的调用获取这个Intent对象(如果服务尚未启动,bindService()会先启动它)

将Intent对象传递给 同步广播Context.sendBroadcast(),有序广播(接收者有优先级,在清单中设置如
 <intent-filter android:priority="100">)
C ontext.sendOrderedBroadcast(), 以及持续广播Context.sendStickyBroadcast()和其它类似方法来产生一个广播。
Android会调用所有对此广播有兴趣的广播接收器的 onReceive()方法,将Intent传递给它们。


调用分 显式和 隐式调用, 调用 Activity等组件都类似


Intent过滤器(Intent filters)

之前注册接受开机启动广播的BroadcastReceiver时已经用到了


清单中描述的Intent过滤器一般会包含action如“android.intent.action.MAIN”和类别如“android.intent.category.LAUNCHER”等等标签用来描述的指定目标组件。

intent.putExtra("title","text");//直接装入
ACTION_BATTERY_LOW, Broadcast Receiver 低电量的一个警告
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值