我正在开发一款需要阅读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});
我确信这条线正在使连接断开,如果我将其注释掉或只是尝试写一个字符串而不是一个字节,连接就不会掉线。
有谁知道我做错了什么?
答案 0 :(得分:1)
事实证明,一周后我找到了一种方法来打开加速度计。我仍然不知道为什么它只是那样工作,但我只是改变了:
characteristic.setValue(new byte[] {0x01});
到
characteristic.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
我不知道" BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE"不变,但它奏效了。