当 蓝牙数据改变时 为什么没有触发onCharacteristicChanged,正常情况下 不是应该触发onCharacteristicChanged 读取数据 广播出去
现在时间是2015年11月24日02:58:24 (夜里),这个问题困扰我一个星期了,仍没能解决,所以希望大神 赐教啊,真的,调了这么久 这么晚,看在辛劳的份上 给个原因分析吧!
尝试了三种setCharacteristicNotification方法,一下列出两种,感觉设置绝不会再出问题,之前的操作 service characteristic 都很熟,但结果蓝牙数据改变时 仍没能触发onCharacteristicChanged
// public void setCharacteristicNotification(BluetoothGattCharacteristic characteristic, boolean enabled) //{
// if (mBluetoothAdapter == null || mBluetoothGatt == null) {
// Log.w(TAG, "BluetoothAdapter not initialized");
// return;
// }
// mBluetoothGatt.setCharacteristicNotification(characteristic, enabled);
// // BluetoothGattDescriptor descriptor = characteristic.getDescriptor(
// // UUID.fromString(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG));
// // descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
// // mBluetoothGatt.writeDescriptor(descriptor);
// // if (UUID_HEART_RATE_MEASUREMENT.equals(characteristic.getUuid()))
// {
// BluetoothGattDescriptor descriptor = characteristic .getDescriptor(UUID .fromString(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG));
// descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
// mBluetoothGatt.writeDescriptor(descriptor);
// }
// }
lic void setCharacteristicNotification ( BluetoothGattCharacteristic characteristic, boolean enabled) {
if (mBluetoothAdapter == null || mBluetoothGatt == null) {
return;
}
mBluetoothGatt.setCharacteristicNotification(characteristic, enabled);
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(UUID.fromString(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG));
if (descriptor != null) {
descriptor.setValue(enabled ? BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE : new byte[] { 0x00, 0x00 });
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
mBluetoothGatt.writeDescriptor(descriptor);
}
}
回调函数中的
private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback()
{
@Override
public void onCharacteristicChanged(BluetoothGatt gatt,BluetoothGattCharacteristic characteristic)
{
Log.e("onCharacteristicChanged", "onCharacteristicChanged");
broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic);
if (characteristic.getValue() != null) {
Log.e("==data", characteristic.getStringValue(0));
//System.out.println(characteristic.getStringValue(0));
}
System.out.println("--------onCharacteristicChanged-----");
Log.e("==data", "--------onCharacteristicChanged-----");
}
}
为什么 为什么啊,蓝牙数据的改变为什么没能触发onCharacteristicChanged
gen,
无非是你去使能notification的时候handle不对,或者你发送notification不正确。
你可以试一下TI的device monitor,源码地址:http://www.deyisupport.com/cfs-file.ashx/__key/communityserver-discussions-components-files/103/7608.source-device-monitor-20140224.zip,参考一下里面的代码。
您好,我打开您给的链接,下载好工程后倒入eclipse出错
Description Resource Path Location Type
LicenseDialog cannot be resolved to a type MainActivity.java /BleDeviceMonitor/src/ti/android/ble/devicemonitor line 221 Java Problem
请问怎么解决?
我也遇到了一样的问题,应该怎么解决啊。
首先确认你android的notification开启了,其次确认你蓝牙端的notification的handle是正确的。