Xamarin蓝牙的InputStream不读取所有字节(有时)

问题描述:

我用这个代码读取蓝牙不LE设备的答复。Xamarin蓝牙的InputStream不读取所有字节(有时)

的解决方案是一个Xamarin表格项目和代码是在DependencyService

using Android.Bluetooth; 

.... 

    public byte[] GetCommand() 
    { 
     byte[] rbuffer = new byte[200]; 
     try 
     { 

      // Read data from the device 
      while (!_socket.InputStream.CanRead || !_socket.InputStream.IsDataAvailable()) 
      { 

      } 
      int readByte = _socket.InputStream.Read(rbuffer, 0, rbuffer.Length); 

     } 
     catch (Java.IO.IOException e) 
     { 

     } 
     return rbuffer; 
    } 

它怎么能解决它?

我会用下面的代码来代替:

//create new class for connect thread 
    private class ConnectedThread extends Thread { 
     private final InputStream mmInStream; 
     private final OutputStream mmOutStream; 


    //creation of the connect thread 
    public ConnectedThread(BluetoothSocket socket) { 
     InputStream tmpIn = null; 
     OutputStream tmpOut = null; 

     try { 
      //Create I/O streams for connection 
      tmpIn = socket.getInputStream(); 
      tmpOut = socket.getOutputStream(); 
     } catch (IOException e) { } 

     mmInStream = tmpIn; 
     mmOutStream = tmpOut; 
    } 

    public void run() { 
     byte[] buffer = new byte[256]; 
     int bytes; 

     // Keep looping to listen for received messages 
     while (true) { 
      try { 
       bytes = mmInStream.read(buffer);   //read bytes from input buffer 
       String readMessage = new String(buffer, 0, bytes); 
       // Send the obtained bytes to the UI Activity via handler 
       bluetoothIn.obtainMessage(handlerState, bytes, -1, readMessage).sendToTarget(); 
      } catch (IOException e) { 
       break; 
      } 
     } 
    } 
    //write method 
    public void write(String input) { 
     byte[] msgBuffer = input.getBytes();   //converts entered String into bytes 
     try { 
      mmOutStream.write(msgBuffer);    //write bytes over BT connection via outstream 
     } catch (IOException e) { 
      //if you cannot write, close the application 
      Toast.makeText(getBaseContext(), "Connection Failure", Toast.LENGTH_LONG).show(); 
      finish(); 

      } 
     } 
    } 

这是为我工作,从一个Arduino获得蓝牙信息! :)