如何在android中写入2字节或4字节的BLE特征值?

时间:2014-01-17 14:23:36

标签: android bluetooth-lowenergy android-bluetooth

我正在开发一个自动化系统,其中我使用Android手机(具有低能量蓝牙)作为遥控器。

我可以成功写入1字节(0xFF)特征值。这是我的示例代码。

byte[] value= {(byte) 0xFF};
characteristic.setValue(value);
mBluetoothGatt.writeCharacteristic(characteristic);

现在的问题是我想要编写多个单字节的特征值,如:

byte[] value= {(byte) 0xFF,(byte) 0xFF,(byte) 0xFF};
characteristic.setValue(value);
mBluetoothGatt.writeCharacteristic(characteristic);

当我将值更改为2字节或3字节以写入特征值时,在onCharacteristicWrite()回调方法else if (status == BluetoothGatt.GATT_INVALID_ATTRIBUTE_LENGTH)中执行条件语句。您可以在下面看到我的示例代码。现在请指导我如何写出2字节或3字节的特性值,在这方面我将非常感谢你。感谢andvace。

   public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) 
        {

            if (status == BluetoothGatt.GATT_SUCCESS) 
            {
                broadcastUpdate(ACTION_DATA_WRITE, characteristic);
                Log.e("WRITE SUCCESS", "onCharacteristicWrite() - status: " + status + "  - UUID: " + characteristic.getUuid());
            }
             ...
             ...
             ...
            else if (status == BluetoothGatt.GATT_INVALID_ATTRIBUTE_LENGTH) 
            {
                Log.e("WRITE PROB", "A write operation exceeds the maximum length of the attribute");
            }
        }

2 个答案:

答案 0 :(得分:1)

您需要从远程设备(手机连接的设备)修改GATT服务器。

显然,服务器上的特性已被定义为长度为1个字节。这就是为什么你不能写一个以上的字节。

答案 1 :(得分:-1)

我有一些配置蓝牙低功耗加密狗的经验,而且特性默认定义了一个长度(据我所知,至少有些实现允许可变长度)。 您尝试编写的特性可能定义为一个字节长。 您应该尝试更改遥控器的固件,或者一次只发送一个字节。