我一直在尝试向连接的蓝牙设备发送一组8个{0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00}十六进制值。
我通过注册broadcastReciever收听蓝牙设备来收听
BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)
并将设备保存在本地变量中,如下所示
m_bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
然后我继续创建一个BluetoothSocket,以便我可以开始发送数据,如下所示
m_socket = device.createRfcommSocketToServiceRecord(device.getUuids()[0].getUuid());
m_socket.connect();
我等待发生任何异常,如果没有捕获异常,我会检查套接字是否已连接到设备
m_socket.isConnected();
然后我继续生成读写流,然后尝试使用以下代码将上述十六进制集发送到设备
try
{
makeRunnableToast("Sending Data"); // Toast sending data
for(int i=0; i < dataToSend.length; i++)
{
m_outStream.write(toBytes(dataToSend[i])); // code i require knowledge on
}
makeRunnableToast("Successfully sent data"); // Toast successfully sent data
initListeningThread(); // begin listening for response
}
catch (IOException e)
{
makeRunnableToast("Failed at outStream writing");
}
当我像这样发送它时,dataToSend是一个包含十六进制值作为整数的int数组,我得到了设备的响应,但它主要是垃圾,绝对不是预期的响应。
我不知道我应该如何正确发送十六进制数据集。任何帮助都将受到极大的赞赏。
toBytes的身体: -
public byte[] toBytes (int i)
{
byte[] bytes = new byte[4];
bytes[0] = (byte)(i>>24);
bytes[1] = (byte)(i>>16);
bytes[2] = (byte) (I>>8);
bytes[3]= (byte)i;
return bytes;
}