Android BluetoothGattServerCallback SIGSEGV



我有两个Android应用程序,一个是我的蓝牙LE服务器,另一个是客户端。在客户端上,在我发现服务后,我使用特征发送消息。像这样:

BluetoothGattCharacteristic characteristic = service.getCharacteristic(CHAR_UUID);
characteristic.setValue("START SENDING...".getBytes());
gatt.writeCharacteristic(characteristic);

然后在我的服务器上调用回调方法onCharacteristicWriteRequest。 在这里,我只是记录消息(工作正常),然后在特征中设置一个值并调用notifyCharacteristicChanged。像这样:

@Override
public void onCharacteristicWriteRequest(BluetoothDevice device, int requestId, 
BluetoothGattCharacteristic characteristic, boolean preparedWrite, 
boolean responseNeeded, int offset, byte[] value) {
super.onCharacteristicWriteRequest(device, requestId, characteristic, 
preparedWrite, responseNeeded, offset, value);
byte[] bytes = value;
String message = new String(bytes);
Log.d(TAG, message);
String someText = "Some Value";
characteristic.setValue(someText.getBytes());
bluetoothGattServer.notifyCharacteristicChanged(device, characteristic, false);
if (responseNeeded) {
bluetoothGattServer.sendResponse(device, requestId, 
BluetoothGatt.GATT_SUCCESS, 0,null);
}
}

不幸的是,当上述方法返回时,我收到以下错误:

A/libc:致命信号 11 (SIGSEGV),代码 1,TID 10460 (Binder_3) 中的故障地址0x10

根据一些堆栈溢出问题,如果您尝试取消引用空指针,但我的变量都不是空的,则会发生此错误。有没有人知道可能是什么问题,或者至少有关于如何调试它的提示?

编辑:

当我注释掉以下代码行时,我没有收到此错误,所以显然它与此有关,但我仍然不知道究竟是什么:

bluetoothGattServer.notifyCharacteristicChanged(device, characteristic, false);

编辑2:

这是我在服务器上配置我的特征的方式:

BluetoothGattCharacteristic characteristic = new  
BluetoothGattCharacteristic(CHAR_UUID,   
BluetoothGattCharacteristic.PROPERTY_WRITE | BluetoothGattCharacteristic.PROPERTY_READ |   BluetoothGattCharacteristic.PROPERTY_BROADCAST, 
BluetoothGattCharacteristic.PERMISSION_READ | BluetoothGattCharacteristic.PERMISSION_WRITE);
BluetoothGattDescriptor descriptor = new 
BluetoothGattDescriptor(DESCRIPTOR_UUID,     
BluetoothGattDescriptor.PERMISSION_WRITE | BluetoothGattDescriptor.PERMISSION_READ);
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
characteristic.addDescriptor(descriptor);
bluetoothGattService.addCharacteristic(characteristic);

显然在调用

bluetoothGattServer.notifyCharacteristicChanged(device, characteristic, false);

onCharacteristicWriteRequest回调方法会导致问题。在其他地方称呼它就可以了。

如果有人知道为什么它不起作用,那仍然很有趣。

相关内容

  • 没有找到相关文章

最新更新