Sök…


Introduktion

I Xamarin.Android konverteras egenskaperna BluetoothSocket.InputStream och BluetoothSocket.OutputStream genom design automatiskt till System.IO.Stream . När det gäller så kallade interaktivt kommunikationsprotokoll, när servern bara svarar när klienten pratar med det, är System.IO.Stream inte bra eftersom det inte har någon metod eller egenskap för att få antalet tillgängliga svarbyte innan du läser svaret.

parametrar

Parameter detaljer
uttag En instans av BluetoothSocket-objekt. Socket måste öppnas innan den här metoden anropas.
cmd Kommando som en byte-grupp för att skicka till BT-enhet.
_mx Eftersom den här metoden använder en hårdvaruressurs är det bättre att ringa det från en separat arbetartråd. Denna parameter är ett exempel på System.Threading.Mutex-objekt och används för att synkronisera tråden med andra trådar som valfritt kallar denna metod.
Paus Vänta tid i millisekunder mellan skriv- och läsoperationer.

Skicka och ta emot data från och till Bluetooth-enhet med socket

Nedanstående exempel använder Android.Runtime.InputStreamInvoker och Android.Runtime.OutputStreamInvoker- typerna får Java.IO.InputStream och Java.IO.OutputStream . När vi har en Java.IO.InputStream- instans kan vi använda den .Available () -metoden för att få antalet tillgängliga svarbytes som vi kan använda i metoden .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;
}


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow