四大组件之BroadcastReceiver

理解广播与广播接收器

  1. 广播事件处理属于系统级的事件处理(一般事件处理是属于View级的事件处理)
  2. 一个应用可以在发生特定事件时发送Broadcast, 系统中任何应用只要注册了对应Receiver就会接收到此Broadcast
  3. 一个应用如果对某个广播感兴趣, 就可以注册对应的Receiver来接收广播
  4. 广播事件机制是应用程序(进程间)之间通信的一种手段

相关API

Context

  • sendBroadcast(Intent intent) : 发送一般广播
  • sendOrderedBroadcast(Intent intent) : 发送有序广播
  • registerReceiver(receiver, intentFilter) : 注册广播接收器
  • unRegisterReceiver(receiver) : 解注册广播接收器

BroadcastReceiver

  • onReceive(Context context, Intent intent) : 接收到广播的回调
  • abortBroadcast() : 中断广播的继续传播
  • boolean isOrderedBroadcast() : 判断是否是有序广播

常见系统广播

  • 收到短信广播 : android.provider.Telephony.SMS_RECEIVED
  • 开机完成广播 : Intent.ACTION_BOOT_COMPLETED
  • 应用被卸载广播 : Intent.ACTION_PACKAGE_REMOVED
  • 手机锁屏 : Intent.ACTION_SCREEN_OFF
  • 手机开屏 : Intent.ACTION_SCREEN_ON

案例

静态注册接受器和发一般广播

编写广播接收器类
public class MyBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getStringExtra("action");
        Log.e("TAG","MyBroadcastReceiver onReceive——接受的数据   "+action);
    }
}
配置文件注册(静态注册)
 <receiver android:name=".MyBroadcastReceiver">
            <intent-filter>
                <action android:name="com.hbwj.myapplication.MyBroadcastReceiver.action">

                </action>
            </intent-filter>
        </receiver>
发送一般广播
public void sendNormalBC(View view) {
        Intent intent = new Intent("com.hbwj.myapplication.MyBroadcastReceiver.action");
        intent.putExtra("action", "sendNormalBC");
        sendBroadcast(intent);
    }

动态注册广播

//动态注册广播
public void registBR(View view) {
        if (receiver == null) {
            receiver = new MyBroadcastReceiver2();
            IntentFilter intent = new IntentFilter("com.hbwj.myapplication.MyBroadcastReceiver.action");
            registerReceiver(receiver, intent);
        } else {
            Toast.makeText(this, "已经注册过了", Toast.LENGTH_SHORT).show();
        }
    }
   //解绑注册
     public void unRegistBR(View view) {
        if (receiver != null) {
            unregisterReceiver(receiver);
            receiver = null;
        }
    }
区别静态注册动态注册
注册方式配置文件java代码
注册时间应用安装成功/手机开机完成注册时,不会创建对象接收到广播才创建执行registerReceiver(receiver, intentFilter),注册就创建对象
生命结束的时间(解注册)应用卸载对象执行onReceive()后就回收了执行unregisterReceiver()(activity退出必须解注册)解注册后对象被回收
应用情景需要监听的时间为应用的整个生命过程中只服务于某个Activity/Service
发送两种类型的广播
发送一般广播
context.sendBroadCast(Intent intent)
发送有序广播
context.sendOrderedBroadcast(Intent intent)

区别两种广播

区别一般广播有序广播
多人接收时是否有序无序, 都会同时执行有序,根据优先级和注册先后依次执行
是否可以中断不可以可以, 通过br.abortBroadcast()中断后, 后面的接收器不能接收到此广播了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值