如何通过蓝牙正确发送十六进制值作为字节数组

时间:2015-01-12 14:39:27

标签: java android bluetooth

我一直在尝试向连接的蓝牙设备发送一组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;
}

0 个答案:

没有答案