Android 蓝牙状态的监听

一、需求背景

客户在使用我公司的Flutter插件时,要求有一个蓝牙与设备重连的功能,我用公司提供的Android SDK只能实现超出和进入蓝牙范围进行重连,但是无法在蓝牙打开进行重连,这不得不让我使用Android手写一个广播监听。

二、实现步骤

1. 添加权限

2. 创建一个类继承 BroadcastReceiver

3. 动态注册和注销广播

4. 监听蓝牙状态

三、代码分享

1. 添加权限

在 AndroidManifest.xml 中添加蓝牙权限

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

2. 创建一个类继承 BroadcastReceiver

public class BLEStateReceiver extends BroadcastReceiver {

    private static final String BLE_STATE_OFF = "android.bluetooth.BluetoothAdapter.STATE_OFF";
    private static final String BLE_STATE_ON = "android.bluetooth.BluetoothAdapter.STATE_ON";
    private static BLEStateReceiver receiver = new BLEStateReceiver();

    /**
     * 注册
     *
     * @param context
     */
    public static void register(Context context) {
        IntentFilter filter = new IntentFilter();
        filter.setPriority(Integer.MAX_VALUE);
        // 监视蓝牙关闭和打开的状态
        filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
        filter.addAction(BLE_STATE_OFF);
        filter.addAction(BLE_STATE_ON);
        context.registerReceiver(receiver, filter);
    }

    /**
     * 注销
     *
     * @param context
     */
    public static void unregister(Context context) {
        context.unregisterReceiver(receiver);
    }

    @Override
    public void onReceive(final Context context, Intent intent) {
        // 检测蓝牙状态的逻辑
    }

}

3. 动态注册和注销广播

我这里是在 ActivityAware 的生命周期中注册的,你可以根据实际情况进行注册,只要在应用运行时注册就行。

public class MoyoungBlePlugin implements ActivityAware {
    
    private Activity activity;

    @Override
    public void onAttachedToActivity(@NonNull ActivityPluginBinding binding) {
        activity = binding.getActivity();

        // 注册广播
        BLEStateReceiver.register(activity);
    }

    @Override
    public void onDetachedFromActivityForConfigChanges() {
    }

    @Override
    public void onReattachedToActivityForConfigChanges(@NonNull ActivityPluginBinding binding) {
    }

    @Override
    public void onDetachedFromActivity() {
        // 注销广播
        BLEStateReceiver.unregister(activity);
        activity = null;
    }

}

4. 监听蓝牙状态

我这里只监听了蓝牙的两种状态,如果想要监听多种状态可以查看参考。

public class BLEStateReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(final Context context, Intent intent) {
        checkBLEState(context, intent);
    }

    /**
     * 检测蓝牙状态
     *
     * @param context
     * @param intent
     */
    private synchronized void checkBLEState(Context context, Intent intent) {
        int BLEState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 0);
        switch (BLEState) {
            case BluetoothAdapter.STATE_ON:
                // 蓝牙已经打开
                break;
            case BluetoothAdapter.STATE_TURNING_OFF:
                // 蓝牙正在关闭
                break;
        }
    }

}

四、参考文案

Android开发——蓝牙状态的监听 - 简书

Android监听蓝牙与设备连接状态、关闭和打开状态_android 蓝牙连接状态监听_MasonYyp的博客-CSDN博客

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你可以通过使用 Android 的 BluetoothAdapter 类提供的方法来监听蓝牙状态。以下是一个示例代码: ``` import android.bluetooth.BluetoothAdapter; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; public class BluetoothStateListener { private BluetoothAdapter bluetoothAdapter; private BluetoothStateReceiver bluetoothStateReceiver; public BluetoothStateListener(Context context) { bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); bluetoothStateReceiver = new BluetoothStateReceiver(); IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED); context.registerReceiver(bluetoothStateReceiver, filter); } public void unregisterReceiver(Context context) { context.unregisterReceiver(bluetoothStateReceiver); } private class BluetoothStateReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(BluetoothAdapter.ACTION_STATE_CHANGED)) { int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1); switch (state) { case BluetoothAdapter.STATE_ON: // 蓝牙已打开 break; case BluetoothAdapter.STATE_OFF: // 蓝牙已关闭 break; } } } } } ``` 以上代码中,我们通过注册一个 BroadcastReceiver 来监听 BluetoothAdapter.ACTION_STATE_CHANGED 广播事件,当蓝牙状态发生变化时,会触发该广播事件,我们可以在 BroadcastReceiver 的 onReceive 方法中处理蓝牙状态的变化。在使用完后,记得调用 unregisterReceiver 方法来注销 BroadcastReceiver。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值