खोज…


परिचय

Xamarin.Android में BluetoothSocket.InputStream और BluetoothSocket.OutputStream प्रॉपर्टीज़ डिज़ाइन द्वारा स्वचालित रूप से System.IO.Stream में परिवर्तित हो जाती हैं। तथाकथित इंटरेक्टिव कम्युनिकेशन प्रोटोकॉल के मामले में, जब सर्वर केवल तभी जवाब देता है जब क्लाइंट उससे बात करता है, तो System.IO.Stream अच्छा नहीं है क्योंकि उसके पास प्रतिक्रिया पढ़ने से पहले उपलब्ध प्रतिक्रिया बाइट्स की संख्या प्राप्त करने के लिए कोई विधि या संपत्ति नहीं है।

पैरामीटर

पैरामीटर विवरण
सॉकेट BluetoothSocket ऑब्जेक्ट का एक उदाहरण। इस पद्धति को कॉल करने से पहले सॉकेट खोला जाना चाहिए।
cmd BT डिवाइस पर भेजने के लिए बाइट सरणी के रूप में कमांड।
_mx चूंकि यह विधि एक हार्डवेयर संसाधन का उपयोग करती है, इसलिए इसे अलग कार्यकर्ता थ्रेड से कॉल करना बेहतर है। यह पैरामीटर System.Threading.Mutex ऑब्जेक्ट का एक उदाहरण है और इस विधि को वैकल्पिक रूप से कॉल करने वाले थ्रेड को अन्य थ्रेड के साथ सिंक्रनाइज़ करने के लिए उपयोग किया जाता है।
समय समाप्त लिखने और पढ़ने के संचालन के बीच मिलीसेकंड में समय प्रतीक्षा करें।

सॉकेट का उपयोग करके ब्लूटूथ डिवाइस से डेटा भेजें और प्राप्त करें

नीचे दिए गए उदाहरण में 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;
}


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow