BroadcastReceiver笔记

: BroadcastReceiver的简述
           BroadcastReceiver也是Android系统的四大组件之一, 这种组件本质上就是一种全局的监听器。用于监听系统全局的广播消息
   之前在按钮上添加的监听器只是程序级别的监听器。 由于BroadcastReceiver是一种全局的监听器,因此它可以非常
 方便地实现系统中不同组件之间的通信
  
    例如客户端程序用startService()方法启动的Service之间的通信,就可以借助于BroadcastReceiver来实现。
一种系统级别的消息传递机制,可以作用在整个系统中,当系统接受到与之匹配的广播时,会自动启动Receiver来
处理广播.它没有生命周期,本质上只是一个系统级别的监听器----它专门负责监听各程序所发出的Broadcast.
   
二:BroadcastReceiver创建过程
1)创建Receiver
编写类继承BroadcastReceiver,重写其OnReceiver方法。
public class FirstReceive  extends BroadcastReceiver{}

2)两种广播的实现 无序和有序
示例1:无序广播加静态注册
      public void btn1(View view ){
           //first为静态注册
           //发送无序广播
          Intent intent = new Intent();
           intent .setAction( "AND100" );
          
           // 无序 广播  不仅要发广播  还要接收数据  广播接收器可以直接接收
           intent .putExtra( "data" , "明天不上课" );
          sendBroadcast( intent );   
     }
 广播静态注册:  (必须注册 否则无法生效)  
(a)在配置文件中添加<receiver>标签
   为其制定android:name属性与 intent-filter的action  
   示例代码:
        < receiver android:name = "com.birup.BroadcastReceiver.FirstService" >
            < intent-filter >  
                < action android:name = "AND1602" />
            </ intent-filter >
        </ receiver >
//在第一个广播接收器中
   在重写OnReceiver方法中。
          String data = intent .getStringExtra( "data" );   //接收数据
          Toast.makeText( context , "我收到了" + data , Toast. LENGTH_SHORT ).show(); //展示出相应的结果;

示例2: 有序广播和动态注册
    
     public void btn2(View view ) {
         Intent intent = new Intent( "AD1602" );  
         intent .putExtra( "data" , "明天不上课" ); //捆绑广播发送数据
          //发送有序
         sendOrderedBroadcast( intent , null );
      }
 动态注册
(b)调用context的registerReceiver方法,参数为Receiver对象与InterFilter对象
     在onDestory方法取消注册,否则出现异常:unregisterReceiver(receiver);
     
          IntentFilter itf = new IntentFilter();
           itf .addAction( "AD1602" );
           itf .setPriority(99);  //有序广播的优先级 取值-1000-1000   
           //动态注册广播接收器
          registerReceiver( new SecondReceiver(), itf );
           //取消广播接收器的注册
           //unregisterReceiver(receiver);

示例3 粘性广播  和前面两种类似  在无广播的时候其不会发送消息  当找到广播时就会发送

BroadcastReceiver创建过程 实现的过程进行总结
   
1)创建Receiver
        编写类继承BroadcastReceiver,重写其OnReceiver方法。
          如果 OnReceiver方法不能在10秒内执行完成,android会认为该程序无响应,所以不要在该方法执行一些耗时的操作。
  否则弹出ANR(Application No Response)的对话框。如果需要完成一些耗时的操作,则可以考虑通过Intent启动一个Service完成。
  不要使用新线程完成。因为广播接收器的生命周期很短。可能出现子线程还没有结束,广播解释器已经退出了。

2)注册Receiver有两种方式(静态注册和动态注册)
    ( a)在配置文件中添加<receiver>标签
    为其制定android:name属性与 intent-filter的action
     (b)调用context的registerReceiver方法,参数为Receiver对象与InterFilter对象
    在onDestory方法取消注册,否则出现异常:unregisterReceiver(receiver);
3)发送广播:
     (a)调用sendBroadcast(Intent)默认的广播机制,所有能与Intent的Action匹配的Receiver都会被触发,
理论上所有Receiver同时去接受广播,消息传递的效率高
      缺点:接收者不能将处理结果传递给下一个接收者,并且无法终止Broadcast Intent的传播     
    (b)有序广播sendOrderBoradcast(Intent,String)广播是根据Receiver的优先级依次接收Broadcast.
   如A>B>C的优先级:Broadcast先传给A,再传给B,最后给C。
           优先级通过<intent-filter>中的android:priority,越大优先级别越高,取值范围-1000到1000,也可以调用
 IntentFilter对象的setPriority()进行设置。
        在传递过程中,可以加入额外数据传递给下一个接收器
                  setResultExtras(Bundle)传递数据
      也可以终止广播的传递,后面的接收者就无法接受到广播
                   abortBradcast()终止广播
       (c)粘性广播sendStickyBroadcast()上面两种广播是及时广播,而粘性广播可以保留广播的信息。如果发广播的时候,
 没有接收器接受。等到有接收器的会再一次发送该广播。需要权限android.permission.BROADCAST_STICKY。
  
附: 常用系统广播
    android.intent.action.TIME_SET:系统时间被修改。
    android.intent.action.DATE_CHANGED:系统日期被修改。
    android.intent.action.BOOT_COMPLETED:系统启动完成。
    android.intent.action.BATTERY_CHANGED:设备电量改变。
    android.intent.action.BATTERY_LOW:设备电量低。
    android.intent.action.ACTION_POWER_CONNECTED:设备连接电源。
    android.intent.action.ACTION_POWER_DISCONNECTED:设备断开电源。
    android.provider.Telephony.SMS_RECEIVED:系统收到短信。
   android.intent.action.NEW_OUTGOING_CALL:拨打电话。
   android.intent.action.SCREEN_OFF当屏幕锁屏的时候触发
   android.intent.action.SCREEN_ON屏幕解锁的时候触发
   android.intent.action.USER_PRESENT当用户重新唤醒手持设备时触发
   ACTION_TIME_CHANGED:系统时间被改变
   ACTION_TIMEZONE_CHANGED:系统时区被改变
   ACTION_BOOT_COMPLETED:系统启动完成
   ACTION_PACKAGE_ADDED:系统添加包
   ACTION_PACKAGE_CHANGED:系统的包改变
   ACTION_PACKAGE_REMOVED:此外的包被删除
   ACTION_PACKAGE_RESTARTED:系统的包被重启
   ACTION_PACKAGE_DATA_CLEARED:系统的包数据被清空
   ACTION_SHUTDOWN:系统被关闭
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值