Android通过广播接收器BroadcastReceiver监听蓝牙连接变化

上一篇介绍了通过广播对蓝牙的打开关闭等变化的监听,这一篇将对蓝牙连接状态的变化进行封装。

首先是广播接收器BlueToothConnectReceiver 类

import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class BlueToothConnectReceiver extends BroadcastReceiver {

    private OnBleConnectListener onBleConnectListener;

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
        switch (action) {
            case BluetoothDevice.ACTION_ACL_CONNECTED:
                if (onBleConnectListener != null) {
                    onBleConnectListener.onConnect(device);
                }
                Log.d("BlueToothConnect", "BroadcastReceiver蓝牙已连接:" + device.getName());
                break;
            case BluetoothDevice.ACTION_ACL_DISCONNECTED:
                //当直接关闭蓝牙时此处不会被触发,只有当蓝牙未关闭并且断开蓝牙时才会触发
                if (onBleConnectListener != null) {
                    onBleConnectListener.onDisConnect(device);
                }
                Log.d("BlueToothConnect", "BroadcastReceiver蓝牙已断开:" + device.getName());
                break;
        }
    }

    public interface OnBleConnectListener {
        void onConnect(BluetoothDevice device);

        void onDisConnect(BluetoothDevice device);
    }

    public void setOnBleConnectListener(OnBleConnectListener onBleConnectListener) {
        this.onBleConnectListener = onBleConnectListener;
    }
}

接着是封装注册和取消注册的BlueToothUtils类,依旧使用单例模式

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.IntentFilter;

/**
 * @author wang songbo
 */
public class BlueToothUtils {

    private static BlueToothUtils INSTANCE;
    private BlueToothStateReceiver blueToothStateReceiver;
    private BlueToothConnectReceiver blueToothConnectReceiver;

    public static synchronized BlueToothUtils getInstance() {
        if (INSTANCE == null) {
            INSTANCE = new BlueToothUtils();
        }
        return INSTANCE;
    }

    //注册广播接收器,用于监听蓝牙状态变化
    public void registerBlueToothStateReceiver(Activity activity) {
        blueToothStateReceiver = new BlueToothStateReceiver();
        IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
        activity.registerReceiver(blueToothStateReceiver, filter);
        blueToothStateReceiver.setOnBlueToothStateListener(new BlueToothStateReceiver.OnBlueToothStateListener() {
            @Override
            public void onStateOff() {
                //do something
            }

            @Override
            public void onStateOn() {
                //do something
            }

            @Override
            public void onStateTurningOn() {
                //do something
            }

            @Override
            public void onStateTurningOff() {
                //do something
            }
        });
    }

    public void unregisterBlueToothStateReceiver(Activity activity) {
        activity.unregisterReceiver(blueToothStateReceiver);
    }

    //注册广播接收器,用于监听蓝牙连接情况的变化
    public void registerBlueToothConnectReceiver(Activity activity) {
        blueToothConnectReceiver = new BlueToothConnectReceiver();
        IntentFilter filter_connect = new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED);
        activity.registerReceiver(blueToothConnectReceiver, filter_connect);
        IntentFilter filter_disconnect = new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECTED);
        activity.registerReceiver(blueToothConnectReceiver, filter_disconnect);
        blueToothConnectReceiver.setOnBleConnectListener(new BlueToothConnectReceiver.OnBleConnectListener() {
            @Override
            public void onConnect(BluetoothDevice device) {

            }

            @Override
            public void onDisConnect(BluetoothDevice device) {

            }
        });
    }

    public void unregisterBlueToothConnectReceiver(Activity activity) {
        activity.unregisterReceiver(blueToothConnectReceiver);
    }

}

在Activity中注册与取消

BlueToothUtils.getInstance().registerBlueToothConnectReceiver(this);//注册广播
BlueToothUtils.getInstance().unregisterBlueToothConnectReceiver(this);//取消注册广播

AndroidManifest.xml中添加权限

    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

蓝牙打开关闭状态变化传送门:

https://blog.csdn.net/u010161303/article/details/88824846

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Android 中,可以通过注册广播接收器监听蓝牙设备的连接和断开事件。具体步骤如下: 1. 在 AndroidManifest.xml 文件中添加以下权限: ```xml <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> ``` 2. 创建一个广播接收器类,继承 BroadcastReceiver 并实现 onReceive 方法: ```java public class BluetoothReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) { // 蓝牙设备连接成功 BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); Log.i("BluetoothReceiver", "Device connected: " + device.getName()); } else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) { // 蓝牙设备连接断开 BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); Log.i("BluetoothReceiver", "Device disconnected: " + device.getName()); } } } ``` 3. 在需要监听蓝牙设备连接和断开事件的地方,注册广播接收器: ```java BluetoothReceiver receiver = new BluetoothReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED); filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED); registerReceiver(receiver, filter); ``` 注意:在不需要监听蓝牙设备连接和断开事件时,需要调用 unregisterReceiver 方法来取消注册广播接收器,以避免内存泄漏。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值