搞定Android Bluetooth Low Energy-03

连接蓝牙设备

BluetoothDevice,扫描到的远程蓝牙设备,可以进行连接connectGatt(),也可以查询设备信息(如:名称、地址、配对状态)
可以通过Mac地址得到BluetoothDevice, BluetoothAdapter.getRemoteDevice(mac)
也可以通过系统配对的蓝牙设备中,获取到BluetoothAdapter.getBondedDevices()

connectGatt

BluetoothDevice.java
/**
 *参数autoConnect:当设备有效(可连接)时,系统是否自动去连接设备。
 *true:系统就会发起一个后台连接,等到系统发现了一个有效设备,就会自动连上,通常这个过程是非常慢的。
 *false:就会直接连接,通常会比较快。
*/
public BluetoothGatt connectGatt (Context context, boolean autoConnect, BluetoothGattCallback callback)

BluetoothGatt.java
// 通过connectGatt连接成功,中途断开重连蓝牙,不需要再次扫描了。有可能失败~
public boolean connect ()
// 断开连接
public void disconnect()
// 关闭Bluetooth GATT client
public void close()

BluetoothGattCallback.java
// 蓝牙连接状态变化
public void onConnectionStateChange (BluetoothGatt gatt, int status, int newState)

连接蓝牙实例

    protected BluetoothGatt mGatt = null;
    //device 连接
    mGatt = device.connectGatt(context, false, mGattCallback);

    protected BluetoothGattCallback mGattCallback = new BluetoothGattCallback() {
        @Override
        public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {

            if (newState == BluetoothProfile.STATE_CONNECTED) {
                //连接成功
                
            } else {
                //连接断开

            }
        }

    };

开发建议

1. connectGatt(),connect(),disconnect(),discoverServices()使用UI线程 Samsung Galaxy S4 BUG
2. BLE开发的各种坑
3. Android Bug:BluetoothGatt.connect() doesn’t work on Nexus devices

发表评论

电子邮件地址不会被公开。 必填项已用*标注