BroadCastReceiver概念与使用

BroadCastReceiver是Android程序的四大组件之一。

BroadCastReceiver实际是广播的接收器,可以对BroadCast(广播)进行过滤,接收,处理的一个类。

使用的方式如下:

广播发送:

将信息(要发送的信息,过滤用的信息。如:Action,Category)添加到一个Intent对象中,然后通过相应的方法将Intent对象作为广播发送出去。

如:

sendBroadcast();

sendOrderedBroadcast();

sendStickyBroadcast();

广播接收:

当Intent对象被发送以后,所有已经加载的BroadCastReceiver会检查加载时的IntentFilter是否与被发送的Intent相匹配,若匹配,会调用BroadCastReceiver的onReceive方法。

所以定义BroadCastReceiver时,要实现onReceive方法。

注:BroadCastReceiver的加载方式有动态加载和静态加载。

注:BroadCastReceiver的生命周期只有十秒左右,所以不要在BroadCastReceiver中做耗时操作。

建议通过Intent让Service做。

广播类型:

普通广播:所有监听该广播的BroadCastReceiver都能收到该广播。

有序广播:按照BroadCastReceiver的优先级顺序接收广播,优先级在intent-filter中的priority中定义,-1000到1000之间,值越大,优先级越高,可以终止广播的继续传播,接收方也可以修改广播内容。

异步广播:不能将处理结果传给下一个接收方,也无法终止。


总结:

普通广播的特点:
1. 同级别接收先后顺序是随机的(无序)。
2. 级别低的后收到广播。
3. 接收方不能截断广播的继续传播也不能处理广播。
4. 同级别动态注册高于静态注册。
有序广播特点:
1. 同级别接收顺序是随机的。
2. 能截断广播的继续传播,高级别的BroadCastReceiver收到该广播后,可以决定是否截断该广播。
3. BroadCastReceiver能截断广播的继续传播,也能处理广播。
4. 同级别动态注册高于静态注册。

静态加载例:

定义BroadCastReceiver:

public class BCR extends BroadCastReceiver
{
   public void onReceive(Context con,Intent intent)
{
    System.out.println(intent.getStringExtra(msg));

}
}
发送普通广播:

Intent inte=new Intent();
inte.setAction("GL_1"); //此处为设置过滤信息。
inte.putExtra("msg","内容");
sendBroadcast(inte);
静态加载:

//在记录文件中,application标签内。
<receiver android:name="此处省略">
<intent-filter android:priority="优先级-1000到1000">
<action android:name="GL_1"/>
</intent-filter>
</receiver>

动态加载例:

定义BroadCastReceiver:

public class BCR2 extends BroadCastReceiver
{
  public void onReceive(Context con,Intent intent)
{
    System.out.println(intent.getStringExtra(msg));


}


}
发送普通广播:

Intent inte=new Intent();
inte.setAction("GL_1"); //设置过滤信息
inte.putExtra("msg","内容");
sendBroadcast(inte);
动态加载:

//在Activity中。

IntentFilter intentfilter=new IntentFilter("GL_1");
//上为过滤
BCR2 bcr2=new BCR2();
registerReceiver(bcr2,intentfilter);
有序广播例:

//发送有序广播。
Intent inte2=new Intent();
inte2.putExtra("msg","有序广播");
inte2.setAction("GL_1");
sendOrderedBroadcast(inte2,null);
//以下为先接收到广播的BroadCastReceiver。
public class BCR extends BroadCastReceiver
{
    public void onReceive(Context con,Intent intent1)
   {
     System.out.println(intent1.getStringExtra("msg"));
      Bundle bun=new Bundle();
      bun.putString("data","处理结果");
      setResultExtras(bun);  //将处理结果设置进去。
      }


} 
//以下为后接收到广播的BroadCastReceiver。
public class BCR2 extends BroadCastReceiver
{
   public void onReceive(Context con,Intent intent2)
  {
     System.out.println(intent2.getStringExtra("msg"));
     Bundle bun=new Bundle();
     bun=getResultExtras(true); //是否要接收处理结果
     String bunstr=bun.getString("data");
      System.out.println(bunstr);
     



   }


}














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值