嗨,我正在读取BLE血糖仪的数据。当我试图阅读“00002a18-0000-1000-8000-00805f9b34fb”的特征时,它只是血糖测量UUID,特征。getProperties方法返回16,并且没有调用我的onCharacteristicRead方法本身。请帮助我如何读取BLOOD\u GLUCOSE\u测量特征。
private final ExpandableListView.OnChildClickListener servicesListClickListner =
new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition,
int childPosition, long id) {
if (mGattCharacteristics != null) {
final BluetoothGattCharacteristic characteristic =
mGattCharacteristics.get(groupPosition).get(childPosition);
final int charaProp = characteristic.getProperties();
if ((charaProp | BluetoothGattCharacteristic.PROPERTY_READ) > 0) {
// If there is an active notification on a characteristic, clear
// it first so it doesn't update the data field on the user interface.
if (mNotifyCharacteristic != null) {
mBluetoothLeService.setCharacteristicNotification(
mNotifyCharacteristic, false);
mNotifyCharacteristic = null;
}
mBluetoothLeService.readCharacteristic(characteristic);
}
if ((charaProp | BluetoothGattCharacteristic.PROPERTY_NOTIFY) > 0) {
mNotifyCharacteristic = characteristic;
mBluetoothLeService.setCharacteristicNotification(
characteristic, true);
}
return true;
}
return false;
}
};
我的读特征方法是
public void readCharacteristic(BluetoothGattCharacteristic characteristic) {
if (mBluetoothAdapter == null || mBluetoothGatt == null) {
Log.w(TAG, "BluetoothAdapter not initialized");
return;
}
final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();
final byte[] data = characteristic.getValue();
if(data != null && data.length > 0){
final char[] out = new char[data.length * 3 - 1];
for(int j = 0; j < data.length; j++) {
int v = data[j] & 0xFF;
out[j * 3] = HEX_ARRAY[v >>> 4];
out[j * 3 + 1] = HEX_ARRAY[v & 0x0F];
if(j != data.length - 1)
out[j * 3 + 2] = '-';
}
}
mBluetoothGatt.readCharacteristic(characteristic);
}
我的setCharacteristicNotification方法是:
public void setCharacteristicNotification(BluetoothGattCharacteristic characteristic,
boolean enabled) {
if (mBluetoothAdapter == null || mBluetoothGatt == null) {
Log.w(TAG, "BluetoothAdapter not initialized");
return;
}
mBluetoothGatt.setCharacteristicNotification(characteristic, enabled);
for (BluetoothGattService service : mBluetoothGatt.getServices()) {
if ((service == null) || (service.getUuid() == null)) {
continue;
}
if (SampleGattAttributes.BLOOD_GLUCOSE_SERVICE.equalsIgnoreCase(service
.getUuid().toString())) {
BluetoothGattCharacteristic charGM =
mBluetoothGatt.getService(UUID.fromString(SampleGattAttributes.BLOOD_GLUCOSE_SERVICE))
.getCharacteristic(UUID.fromString(SampleGattAttributes.BLOOD_GLUCOSE_MEASUREMENT));
mBluetoothGatt.setCharacteristicNotification(charGM, enabled);
BluetoothGattDescriptor descGM = charGM.getDescriptor(UUID.fromString(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG));
descGM.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
mBluetoothGatt.writeDescriptor(descGM);
BluetoothGattCharacteristic charGMC =
mBluetoothGatt.getService(UUID.fromString(SampleGattAttributes.BLOOD_GLUCOSE_SERVICE))
.getCharacteristic(UUID.fromString(SampleGattAttributes.BLOOD_GLUCOSE_MEASUREMENT_context));
mBluetoothGatt.setCharacteristicNotification(charGMC, enabled);
BluetoothGattDescriptor descGMC = charGMC.getDescriptor(UUID.fromString(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG));
descGMC.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
mBluetoothGatt.writeDescriptor(descGMC);
BluetoothGattCharacteristic charRACP =
mBluetoothGatt.getService(UUID.fromString(SampleGattAttributes.BLOOD_GLUCOSE_SERVICE))
.getCharacteristic(UUID.fromString(SampleGattAttributes.RECORD_ACCESS_CONTROL_POINT));
mBluetoothGatt.setCharacteristicNotification(charRACP, enabled);
BluetoothGattDescriptor descRACP = charRACP.getDescriptor(UUID.fromString(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG));
descRACP.setValue(BluetoothGattDescriptor.ENABLE_INDICATION_VALUE);
mBluetoothGatt.writeDescriptor(descRACP);
/*BluetoothGattCharacteristic charBarrery =
mBluetoothGatt.getService(UUID.fromString(SampleGattAttributes.SERVICE_BATTERY_SERVICE))
.getCharacteristic(UUID.fromString(SampleGattAttributes.CHAR_BATTERY_LEVEL));
mBluetoothGatt.setCharacteristicNotification(charBarrery, enabled);
BluetoothGattDescriptor descBarrery = charBarrery.getDescriptor(UUID.fromString(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG));
descBarrery.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
mBluetoothGatt.writeDescriptor(descBarrery);*/
/* runOnUiThread(new Runnable() {
public void run() {
btnUpdateData.setEnabled(true);
};
});*/
}
}
}
characteristic.getProperties()
返回16,
这是BluetoothGatt特性的值。PROPERTY_NOTIFY
。
您已设置特征通知,
if ((charaProp | BluetoothGattCharacteristic.PROPERTY_NOTIFY) > 0) {
mNotifyCharacteristic = characteristic;
mBluetoothLeService.setCharacteristicNotification(
characteristic, true);
}
您现在需要调用readCharityistic(期望特性)
。
或/和ononDescriptorWrite()
回调。
编辑:
呼叫后
mBluetoothGatt.readCharacteristic(characteristic);
您需要在回调上接收数据
onCharacteristicRead(BluetoothGatt gatt, ..., ...){
final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();
final byte[] data = characteristic.getValue();
if(data != null && data.length > 0){
final char[] out = new char[data.length * 3 - 1];
for(int j = 0; j < data.length; j++) {
int v = data[j] & 0xFF;
out[j * 3] = HEX_ARRAY[v >>> 4];
out[j * 3 + 1] = HEX_ARRAY[v & 0x0F];
if(j != data.length - 1)
out[j * 3 + 2] = '-';
}
}
}
我想创建一个
问题内容: 我刚刚看到一个成员函数,如下所示: 但是Cat是这样的接口: 因此,我对如何解释这一点感到困惑。我知道什么东西返回一个对象或原语是什么意思。但是返回接口意味着什么?如何使用此函数的返回值? 问题答案: 考虑一下这种方式:如果在常规类的哪里,当您想在其上调用某些方法时,您 究竟 在乎什么呢? 您会关心方法定义:它们的名称,它们的参数类型,它们的返回值。你 并不 需要关心实际的实现! 由于
在搜索有关保守impl-trait的文档时,我发现了以下示例: 生存期在返回类型中是什么意思? 我知道这个关于生命周期限制的问题,但我认为用例是不同的。如果我能很好地理解答案: trait对象仅对生存期“a”有效 这意味着位于堆中某处的trait对象将在生命周期中持续一段时间。 但在这里,这不是特征对象,而是堆栈中的具体对象。因此编译器不需要有关于其生存期的提示。 我错过了什么?
看着新的Azure cosmos数据库,我对它的多模型特性有点困惑。具体而言,这是否意味着: a)相同的底层数据库/存储可以以多种方式并发查询,以便我可以对相同的集合使用gremlin图查询和mongodb api。 或 b)这是否意味着您可以在预配Cosmos DB时选择不同的模型(图、键值、列、文档),这就是从那时起存储数据的方式。 小册子让它听起来像a),但使用Azure仪表板创建cosmo
我是java编程新手,不知道这些错误的含义: 源代码: 程序的名称与类的名称相同,我找到了解决方案。当我删除类中的public player和playgame时,程序没有出现错误,但我仍然无法理解错误的含义。请帮帮我