如何将十六进制值发送到BLE设备?

时间:2018-03-26 12:31:06

标签: android bluetooth-lowenergy android-ble

我正在开发一个应用程序,其中作为输入我必须给BLE一个十六进制值作为时间参数,以便设备运行那么长时间。我已经尝试了所有我知道的但它不起作用。请帮我解决一下。

    AppConstants.pulse_time.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_DEFAULT);
                        AppConstants.gatt.setCharacteristicNotification(AppConstants.pulse_time, true);
//                        AppConstants.pulse_time.setValue(3, BluetoothGattCharacteristic.FORMAT_UINT16, 0);
//                        AppConstants.pulse_time.setValue(toBytes(03));
//                        AppConstants.pulse_time.setValue(toHex(""+3));
//                        AppConstants.pulse_time.setValue("0x2");
//                        AppConstants.pulse_time.setValue(convertStringToHex("32"));
                        AppConstants.pulse_time.setValue("0x"+ Integer.toHexString(2));
//                        AppConstants.pulse_time.setValue(String.format("%02x","2"));
//                        AppConstants.pulse_time.setValue(Integer.toString(2, 16));
//                        AppConstants.pulse_time.setValue(hexStringToByteArray("0x2"));
//                        AppConstants.pulse_time.setValue(31,BluetoothGattCharacteristic.FORMAT_UINT8,0);
//                        AppConstants.pulse_time.setValue(toBytes(3));
                        AppConstants.gatt.writeCharacteristic(AppConstants.pulse_time);



private String convertStringToHex(String string)
    {
        StringBuilder newString = new StringBuilder();
        for (int i=0; i<string.length(); i++)
        {
            newString.append(String.format("%02X ", (byte)(string.charAt(i))));
        }
        return newString.toString();
    }

    public static byte[] hexStringToByteArray(String s) {
        int len = s.length();
        byte[] data = new byte[(len / 2)];
        for (int i = 0; i < len; i += 2) {
            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i + 1), 16));
        }
        return data;
    }

    public static String bytesToHex(byte[] bytes) {
        char[] hexChars = new char[bytes.length * 2];
        for ( int j = 0; j < bytes.length; j++ ) {
            int v = bytes[j] & 0xFF;
            hexChars[j * 2] = hexArray[v >>> 4];
            hexChars[j * 2 + 1] = hexArray[v & 0x0F];
        }
        return new String(hexChars);
    }

1 个答案:

答案 0 :(得分:0)

晚上好,请你解释一下这种“十六进制”的结果应该是什么样的细粒度?你需要两个函数,在字符串和十六进制(十六进制数)之间进行转换?

如果代码是Java,请参考:

public static int convert(int n) {
  return Integer.valueOf(String.valueOf(n), 16);
}

或:

Integer.toHexString(int)

我知道这只是一个整数,而不是一个字符串。请解释一下,“AppConstants.pulse_time.setValue”期望什么作为参数。