如何在Android上连接蓝牙LE设备(平台19)

时间:2014-02-17 11:16:10

标签: android bluetooth bluetooth-lowenergy gatt

我正在使用BT低能耗行李提示装置(Link)并成功将其与我的Nexus 7配对。

关注docs 我现在想使用以下代码连接到设备:

private BluetoothGattCallback callback = new BluetoothGattCallback() {
    @Override
    public void onConnectionStateChange(BluetoothGatt gatt, int status,
            int newState) {
        Log.i(TAG, "le onConnectionStateChange ["+newState+"]");
        if (newState == BluetoothProfile.STATE_CONNECTED) {
            Log.i(TAG, "le device connected");
            onConnect(gatt.getDevice());
        } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
            Log.i(TAG, "le device disconnected");
            onDisconnect(gatt.getDevice());
        }
    }
    @Override
    public void onServicesDiscovered (BluetoothGatt gatt, int status) {
        Log.i(TAG, "onServicesDiscovered");
    }
};


for (BluetoothDevice device : BluetoothAdapter.getDefaultAdapter().getBondedDevices()) {
    int type = device.getType();

    if (type == BluetoothDevice.DEVICE_TYPE_LE || type == BluetoothDevice.DEVICE_TYPE_DUAL) {
        List<BluetoothDevice> connectedDevices =    
        bluetoothManager.getConnectedDevices(BluetoothProfile.GATT);

        if (!connectedDevices.contains(device)) {
            BluetoothGatt gatt = device.connectGatt(App.getContext(), false, callback);
            gatt.connect();
            gatt.discoverServices();
            List<BluetoothGattService> services = gatt.getServices();
        }
    }
}

但是无法启动任何连接。过了一会儿(几秒钟)连接状态 更改为BluetoothProfile.STATE_DISCONNECTED - 即使BluetoothProfile.STATE_CONNECTED也是如此 从未到过。我在这里做错了吗?

2 个答案:

答案 0 :(得分:2)

嗯,事实证明,我的代码毕竟是正确的。 显然蓝牙堆栈已进入故障状态 只能通过关闭设备来恢复 然后再打开它。

仅供参考:我有Nexus 7设备。第一版之一(我认为它出来了 在2012年底)和最近的一个。

Bluetooth Low Energy无法在2012款Nexus 7上运行。 (甚至在关闭然后再打开之后)。

这两款设备都运行Android 4.4.2。

我的结论是,Bluetooth Low Energy无法在Nexus 7 2012上运行 并且在当前的Nexus 7上不稳定。

这是多么可悲。

答案 1 :(得分:0)

问题是android只允许6个最大的蓝牙连接。当设备断开连接时,您必须调用mBluetoothGatt.close()