如果切换Activity之间需要传递数据,Intent可利用Bundle组件实现,Bundle对象可被堪称一个哈希表,该映射表建立了将关键字(标识)同其值的映射关系,可通过Bundle类的putXXX(key,value)方法将数据封装在Bundle对象中,如PutString(String key,String value).PutXXX方法第一个参数是关键字,可通过getXXX(String key)取得关键字对应的数据
例如: intent.putExtras(bundle);写入
读取:intent = this.getIntent();
bundle = intent.getExtras();
Intent对象通过调用putExtras方法将Bundle对象捆绑到Intent对象,Intent类包含putExtras方法:
Puclic Intent putExtras(Bundle extras):将Bundle对象extras复制到Intent对象中
Public Intent putExtras(Intent src):将Intent对象src复制到Intent对象中
Intent分类
intent是一种同一或者不同应用程序中的组件之间互相调用的机制,一般来说,Android根据Intent的描述找到对应的组件,并将Intent传递给调用的组件,可通过startActivity启动一个活动,利用broadcastIntent 把Intent对象广播给所有插入的BroadcaseReceiver组件.
按照Intent的处理方式,Intent可以分为显式Intent和隐式Intent两类,显式Intent通过名字指定被调用,例如Intent("android.intent.action.CALL",Uri.parse("tel:"+string));
显式Intent通常用于应用程序中多个Activity之间的交互,因为开发者通常不知道其他应用程序的组件名字,显式Intent通常用于应用程序内部消息,如一个活动启动从属的服务或启动一个姐妹活动,显式方式通常被成为Action Intent. 相对于显式Intent,Android还提供了隐式的Intent, 这种方式并不指定目标应用的名字,为了找到合适的目标应用,隐式方式需要广播Intent消息,隐式方式被称为BroadcastIntent.
ActionIntent
BroadcastIntent
ActionIntent只能指定一个Activity处理,如果Intent需要不止一个Activity处理,就需要通过BroadcastIntent的机制来处理这种情况,这种机制可广播Intent到多个Activity.
Broadcast Intent 机制的实现包含了4个过程,
1,需要注册相应的Broadcast Receiver,这时接收广播消息并对消息做出反应的组件.
首先继承BroadcastReceiver,并重写onReceive方法,更具IntentFilter注册BroadcastIntent,有两种注册方法
1),Java注册,创建IntentFilter和Receiver对象,然后在需要的地方调用Context.registerReceiver进行注册,同样,可使用Content.unregisterReceiver取消注册
IntentFilter myfilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
MyReceiver myreceiver = new MyReceiver();
Content.registerReceiver(myreceiver,myfilter);
2),XML注册
<reveiver android:name=".MyReceiver">
<intent-filter>
<action android:name="android,provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</reveiver>
2,发送广播,这个过程将消息内容和 用于过滤的信息封装起来,并广播给BroadcastReceiver.
有三种方式,这三种方式都是有Context提供的,
1),Context.sendBroadcast:广播Intent到BroadcastReceiver,满足条件的BroadcastReceiver都会执行onReceiver方法,这种方式不严格保证顺序
2),Context.sendOrderBroadcast:这种方法保证执行顺序,是按照注册时IntentFilter设置的优先级顺序来执行,
3),Context.sendStrikyBroadcast:这种方式一直保存sendStriky Broadcast发送的Intent,这样以后使用registerReceiver注册接收器时,新注册的接收器的Intent对象为该对象.
3,满足条件的BroadcaseReceiver执行onReceiver方法
4,执行onReceiver方法,销毁BroadcastReceiver.每次广播到了以后,执行onReceiver方法时,android系统会启动一个程序计时器,如果一定时间内onReveiver没有执行完,会被认为程序无响应,所以,onReceiver方法需要包含快速执行的逻辑,否则会弹出程序无响应的对话框.
收到Broadcast Intent后,所有包含相匹配的IntentFilter的BroadcastReceiver就会被激活,只有Broadcastreceiver才能接收Broadcast Intent消息,
Activity只接收由startActivity方法传递的消息,Service只接收startService方法传递的消息.BroadcastIntent机制被广泛运用于通知设备或系统的状态变化,例如手机电池电量低了,系统会发出一个广播,广播的Action为ACTION_BATTERY_LOW,收到该广播后,所有包含相匹配的InterFilter的BroadcastReceiver就会执行onReceiver方法的处理代码,比如进入节电模式
public void onReceive(Content mycontent,Intent myintent){
if(myintent.getAction().equals(Intent.ACTION_BATTERY_LOW)){
}//添加低电量的处理
}