TI中文支持网
TI专业的中文技术问题搜集分享网站

当 蓝牙数据改变时 为什么没有触发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

Yan:

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,参考一下里面的代码。

Callon Huang:

回复 Yan:

您好,我打开您给的链接,下载好工程后倒入eclipse出错

Description Resource Path Location TypeLicenseDialog cannot be resolved to a type MainActivity.java /BleDeviceMonitor/src/ti/android/ble/devicemonitor line 221 Java Problem

请问怎么解决?

chenjiao chen:

我也遇到了一样的问题,应该怎么解决啊。

Callon Huang:

回复 chenjiao chen:

首先确认你android的notification开启了,其次确认你蓝牙端的notification的handle是正确的。

赞(0)
未经允许不得转载:TI中文支持网 » 当 蓝牙数据改变时 为什么没有触发onCharacteristicChanged,正常情况下 不是应该触发onCharacteristicChanged 读取数据 广播出去
分享到: 更多 (0)