当尝试在android上启用加速计时,keyfob cc2541蓝牙连接丢失

时间:2015-02-27 17:47:33

标签: android bluetooth-lowenergy

我正在开发一款需要阅读Keyfob的Accelerometer数据的Android应用。到目前为止,我已经按照本教程进行了操作:https://thenewcircle.com/s/post/1553/bluetooth_smart_le_android_tutorial

有了它,我能够连接Keyfob,搜索服务并阅读一些特征。问题是当我尝试启用密钥卡的加速度计时,蓝牙连接就会掉线。

这是我用来尝试启用加速度计的代码:

private void enableAccelerometer(BluetoothGatt gatt){
        BluetoothGattCharacteristic characteristic;
        BluetoothGattService service;
        Log.d(TAG, "ligando acelerometro");
        service = gatt.getService(ACCELEROMETER_SERVICE);
        if(service == null){
            Log.d(TAG, "Not able to find the service");
        }
        else{
            Log.d(TAG, "Service found");
            characteristic = service.getCharacteristic(ENABLE_ACCELEROMETER);
            if(characteristic == null){
                Log.d(TAG, "Characteristic not found");
            }
            else{
                characteristic.setValue(new byte[] {0x01});
                if (!gatt.writeCharacteristic(characteristic)){
                    Log.d(TAG, "writing failed ");
                }
                else {
                    Log.d(TAG, "writing successful:  ");
                }
            }
        }

此方法在" onServicesDiscovered"回调函数。

德州仪器CC2540 / 41迷你开发套件用户指南指出,要启用加速度计,必须编写" 01"在加速度计服务中的启用加速器特性中,这就是我在使用此代码时所做的事情。

当我写信时,手机(运行Android 4.4.2的LG G2 mini)之间的连接断开:

  characteristic.setValue(new byte[] {0x01});

我确信这条线正在使连接断开,如果我将其注释掉或只是尝试写一个字符串而不是一个字节,连接就不会掉线。

有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:1)

事实证明,一周后我找到了一种方法来打开加速度计。我仍然不知道为什么它只是那样工作,但我只是改变了:

characteristic.setValue(new byte[] {0x01});

characteristic.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);

我不知道" BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE"不变,但它奏效了。