Android BluetoothGattServerCallback SIGSEGV

时间:2018-05-16 11:01:49

标签: android bluetooth-lowenergy sigsegv

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

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中的故障地址0x10(Binder_3)

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

修改

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

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);

1 个答案:

答案 0 :(得分:1)

显然是在打电话

bluetoothGattServer.notifyCharacteristicChanged(device, characteristic, false);

onCharacteristicWriteRequest回调方法中的

导致问题。把它叫到其他地方就可以了。

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