• android 蓝牙设备监听广播


    蓝牙权限 <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);
        }
    }
    
    /**
     * 判断蓝牙设备是否是输入设备,这里认为 PERIPHERAL是输入设备
     */
    private boolean isInputDevice(BluetoothDevice device) {
        int deviceMajorClass = device.getBluetoothClass().getMajorDeviceClass();
        if (deviceMajorClass == BluetoothClass.Device.Major.PERIPHERAL) {
            return true;
        }
    
        return false;
    }
    复制代码
  • 相关阅读:
    软件工程 2+ 自动生成四则运算题 测试版
    面向对象 (5)计算柱体体积可换底
    面向对象 (4)正方形的周长和面积
    软件工程 3.关于软件质量保障初探
    面向对象 (3)四棱柱的体积与数的判断
    面向对象 (1)矩形的面积和周长
    面向对象 (2)n的阶乘与两点距离
    软件工程 2.20194650 自动生成四则运算题第一版报告
    软件工程 1.《现代软件工程—构建之法》-概论(精读一章有感+练习与讨论部分)
    第四次博客作业-结对项目
  • 原文地址:https://www.cnblogs.com/dongweiq/p/6439115.html
Copyright © 2020-2023  润新知