zoukankan      html  css  js  c++  java
  • 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;
    }
    复制代码
  • 相关阅读:
    几个新角色:数据科学家、数据分析师、数据(算法)工程师
    人类投资经理再也无法击败电脑的时代终将到来了...
    Action Results in Web API 2
    Multiple actions were found that match the request in Web Api
    Routing in ASP.NET Web API
    how to create an asp.net web api project in visual studio 2017
    网站漏洞扫描工具
    How does asp.net web api work?
    asp.net web api history and how does it work?
    What is the difference between a web API and a web service?
  • 原文地址:https://www.cnblogs.com/dongweiq/p/6439115.html
Copyright © 2011-2022 走看看