使用套接字從藍芽裝置傳送資料和從藍芽裝置接收資料
下面的示例使用 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;
}