蓝牙状态

本文介绍了如何在Android中监听蓝牙状态变化,包括手机蓝牙的开启关闭、蓝牙设备的配对与解除配对,以及蓝牙设备的连接与断开。通过`BluetoothAdapter.ACTION_STATE_CHANGED`、`BluetoothDevice.ACTION_BOND_STATE_CHANGED`和`BluetoothDevice.ACTION_ACL_CONNECTED`、`BluetoothDevice.ACTION_ACL_DISCONNECTED`等广播,可以实时监控蓝牙设备的状态,并使用`BluetoothClass`获取设备类型。此外,还提到了如何维护一个已连接蓝牙设备的列表。
摘要由CSDN通过智能技术生成

蓝牙权限 <uses-permission android:name="android.permission.BLUETOOTH" />

1、监听手机本身蓝牙状态的广播

手机蓝牙开启关闭时发送

action: BluetoothAdapter.ACTION_STATE_CHANGED

复制代码
if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
    int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
            BluetoothAdapter.ERROR);
    switch (state) {
        case BluetoothAdapter.STATE_OFF:
            Log.d("aaa", "STATE_OFF 手机蓝牙关闭");
            break;
        case BluetoothAdapter.STATE_TURNING_OFF:
            Log.d("aaa", "STATE_TURNING_OFF 手机蓝牙正在关闭");
            break;
        case BluetoothAdapter.STATE_ON:
            Log.d("aaa", "STATE_ON 手机蓝牙开启");
            break;
        case BluetoothAdapter.STATE_TURNING_ON:
            Log.d("aaa", "STATE_TURNING_ON 手机蓝牙正在开启");
            break;
    }
}
复制代码

2、监听蓝牙设备配对状态的广播

蓝牙设备配对和解除配对时发送

action: BluetoothDevice.ACTION_BOND_STATE_CHANGED

复制代码
if (action.equals(BluetoothDevice.ACTION_BOND_STATE_CHANGED)) {
    BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
    String name = device.getName();
    Log.d("aaa", "device name: " + name);
    int state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, -1);
    switch (state) {
        case BluetoothDevice.BOND_NONE:
            Log.d("aaa", "BOND_NONE 删除配对");
            break;
        case BluetoothDevice.BOND_BONDING:
            Log.d("aaa", "BOND_BONDING 正在配对");
            break;
        case BluetoothDevice.BOND_BONDED:
            Log.d("aaa", "BOND_BONDED 配对成功");
            break;
    }
} 
复制代码

3、监听蓝牙设备连接和连接断开的广播

蓝牙设备连接上和断开连接时发送, 这两个监听的是底层的连接状态

action: BluetoothDevice.ACTION_ACL_CONNECTED   BluetoothDevice.ACTION_ACL_DISCONNECTED

复制代码
if (action.equals(BluetoothDevice.ACTION_ACL_CONNECTED)) {
    BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
    Log.d("aaa", device.getName() + " ACTION_ACL_CONNECTED");
} else if (action.equals(BluetoothDevice.ACTION_ACL_DISCONNECTED)) {
    BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
    Log.d("aaa", device.getName() + " ACTION_ACL_DISCONNECTED");
}
复制代码

BluetoothClass 可以获取蓝牙设备的类型

如果想获取当前已连接上的所有蓝牙设备,可以在这两个广播中手动维护一个连接设备的列表。

像下面这样:

复制代码
/**
 * 记录当前正在连接的所有蓝牙输入设备
 */
public List<BluetoothDevice> connectedBluetoothDevices = new ArrayList<BluetoothDevice>();

if (intent.getAction().equals(BluetoothDevice.ACTION_ACL_CONNECTED)) {
    BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
    if (isInputDevice(device)) {
        List<BluetoothDevice> connectedBluetoothDevices = ((MyApplication) getApplication()).connectedBluetoothDevices;
        if (!connectedBluetoothDevices.contains(device)) {
            connectedBluetoothDevices.add(device);
        }
    }
} else if (intent.getAction().equals(BluetoothDevice.ACTION_ACL_DISCONNECTED)) {
    BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
    if (isInputDevice(device)) {
        List<BluetoothDevice> connectedBluetoothDevices = ((MyApplication) getApplication()).connectedBluetoothDevices;
        connectedBluetoothDevices.remove(device);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值