Android BroadcastReceiver的简单实用

一、BroadcastReceiver的概述

BroadcastReceiver是Android的四大组件之一。

那么有什么作用呢。广播接收器是一个用于接收广播通知信息,并做出对应处理的组件。比如我们常见的系统广播──通知时区改变、电池电量低、拍摄了一张照片或者用户改变了语言选项。在实际开发中我们可以拥通过集成自BroadcastReceiver基类来进行自定义广播,实现我们的业务需求的消息通讯。广播接收器没有用户界面。然而,它们可以启动一个activity来响应它们收到的信息,或者用NotificationManager来通知用户,以此来达到一种通讯。

1、广播的类别

* 有序广播(普通广播):对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响。对于这种广播,接收者无法终止广播,即无法阻止其他接收者的接收动作。这个也是我们使用较多的一种广播类型。

* 无序广播:它每次只发送到优先级较高的接收者那里,然后由优先级高的接受者再传播到优先级低的接收者那里,优先级高的接收者有能力终止这个广播

2、广播的使用流程

1.  继承BroadcastReceiver实现自定义广播类:这里有两种形式的广播创建:单独类文件、内部类形式。重写onReceive方法进行消息的处理。
2.  注册广播:俗称有静态注册和动态注册。静态注册指在manifest文件中注册的广播,这种注册的广播具有应用程序级别的效果。动态注册就是通过代码进行注册,比如我们在Activity中通过Context.registerReceiver进行注册,这种广播具有组件级别的效果,即当我们调用unregisterReceiver()方法或组件销毁广播就无法被接收处理了。
3.  发送广播:这里发送广播通过Context的sendBroadcast()方法或sendOrderedBroadcast()方法进行发送普通广播或有序广播。

好了,类别和使用流程摘抄自网上。

二、BroadcastReceiver的使用

需要使用的类必须继承BroadcastReceiver并且必须重写 onReceive() 方法
  
  
  • 广播接收器接收到相应广播后,会自动回调 onReceive() 方法
  • 一般情况下,onReceive方法会涉及 与 其他组件之间的交互,如发送Notification、启动Service
  • 默认情况下,广播接收器运行在 UI 线程,因此,onReceive()方法不能执行耗时操作,否则将导致ANR
下面列举监听开机自启和蓝牙的启动和关闭
 @Override
    public void onReceive(Context context, Intent intent) {
        // 在这里干你想干的事(启动一个Service,Activity等)
        if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))
        {
//            Intent i = new Intent(context, MainActivity.class);
//            context.startActivity(i);
            Log.w("开机自启","");
        }
        switch (intent.getAction()) {
            case BluetoothAdapter.ACTION_STATE_CHANGED:
                int blueState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 0);
                switch (blueState) {
                    case BluetoothAdapter.STATE_TURNING_ON:
                        Log.e("TAG", "TURNING_ON");
                        break;
                    case BluetoothAdapter.STATE_ON:
                        Log.e("TAG", "STATE_ON");
                        break;
                    case BluetoothAdapter.STATE_TURNING_OFF:
                        Log.e("TAG", "STATE_TURNING_OFF");
                        break;
                    case BluetoothAdapter.STATE_OFF:
                        Log.e("TAG", "STATE_OFF");
                        break;
                }
                break;
        }

    }

三、BroadcastReceiver的注册

注册的方式分为两种:静态注册、动态注册

1.静态注册

过滤器里面过滤了开机自启和蓝牙状态的广播
<receiver
            android:name=".BootReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="1000">
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
                <action android:name="android.bluetooth.adapter.action.STATE_CHANGED"/>
            </intent-filter>
        </receiver>
2.动态注册
动态广播,有注册就必然得有注销,否则会导致内存泄露
/ 选择在Activity生命周期方法中的onResume()中注册
@Override
  protected void onResume(){
      super.onResume();

    // 1. 实例化BroadcastReceiver子类 &  IntentFilter
     mBroadcastReceiver mBroadcastReceiver = new BroadcastReceiver();
     IntentFilter intentFilter = new IntentFilter();

    // 2. 设置接收广播的类型
    intentFilter.addAction(android.net.conn.CONNECTIVITY_CHANGE);

    // 3. 动态注册:调用Context的registerReceiver()方法
     registerReceiver(mBroadcastReceiver, intentFilter);
 }


// 注册广播后,要在相应位置记得销毁广播
// 即在onPause() 中unregisterReceiver(mBroadcastReceiver)
// 当此Activity实例化时,会动态将MyBroadcastReceiver注册到系统中
// 当此Activity销毁时,动态注册的MyBroadcastReceiver将不再接收到相应的广播。
 @Override
 protected void onPause() {
     super.onPause();
      //销毁在onResume()方法中的广播
     unregisterReceiver(mBroadcastReceiver);
     }
}

源码 下载
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值