使用套接字从蓝牙设备发送数据和从蓝牙设备接收数据
下面的示例使用 Android.Runtime.InputStreamInvoker 和 Android.Runtime.OutputStreamInvoker 类型获取 Java.IO.InputStream 和 Java.IO.OutputStream 。一旦我们有一个 java.io.InputStream 中的实例,我们可以用它 .Available()
方法来获得,我们可以利用现有的响应字节数 .Read()
方法:
byte[] Talk2BTsocket(BluetoothSocket socket, byte[] cmd, Mutex _mx, int timeOut = 150)
{
var buf = new byte[0x20];
_mx.WaitOne();
try
{
using (var ost = socket.OutputStream)
{
var _ost = (ost as OutputStreamInvoker).BaseOutputStream;
_ost.Write(cmd, 0, cmd.Length);
}
// needed because when skipped, it can cause no or invalid data on input stream
Thread.Sleep(timeOut);
using (var ist = socket.InputStream)
{
var _ist = (ist as InputStreamInvoker).BaseInputStream;
var aa = 0;
if ((aa = _ist.Available()) > 0)
{
var nn = _ist.Read(buf, 0, aa);
System.Array.Resize(ref buf, nn);
}
}
}
catch (System.Exception ex)
{
DisplayAlert(ex.Message);
}
finally
{
_mx.ReleaseMutex(); // must be called here !!!
}
return buf;
}