Witam Forumowiczów,
Pracuję teraz nad prostą aplikacją (Android Studio 2.2.3), która umożliwi mi odbieranie i wysyłanie ramki danych w postaci 5 bajtów. Pierwszy bajt to bajt informujący o rozpoczęciu transmisji (0xAC), natomiast 4 kolejne powinny zostać zapisane kolejno do zmiennej id_ramki i tablicy "d". Oto fragment kodu z handlera:

         mHandler = new Handler(){
            public void handleMessage(android.os.Message msg){
                if(msg.what == MESSAGE_READ){
                    String readMessage = null;
                    try {
                        readMessage = new String((byte[]) msg.obj, "UTF-8");
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                    try {

                        byte licznik =0;
                        Integer[] d=new Integer[3];
                        Integer id_ramki;

                        if ((readMessage == "0xAC")&licznik == 0)
                        {
                            licznik++;
                        }
                        else if (licznik==1)
                        {
                            id_ramki = Integer.decode(readMessage.toString());
                            licznik++;
                        }
                        else if (licznik ==2)
                        {
                            d[0] = Integer.decode(readMessage.toString());
                            licznik++;
                        }
                        else if (licznik ==3)
                        {
                            d[1] = Integer.decode(readMessage.toString());
                            licznik++;
                        }
                        else if (licznik ==4)
                        {
                            d[2] = Integer.decode(readMessage.toString());
                            licznik=0;
                        }
                        Toast.makeText(getApplicationContext(),d[0],Toast.LENGTH_SHORT).show();

                    }
                    catch (IllegalArgumentException e){}
                }

                if(msg.what == CONNECTING_STATUS){
                    if(msg.arg1 == 1)
                        mBluetoothStatus.setText("Connected to Device: " + (String)(msg.obj));
                    else
                        mBluetoothStatus.setText("Connection Failed");
                }
            }
        };

Przy odebraniu pierwszego bajtu sprawdzane jest, czy to bit startu transmisji, oraz czy stan licznika jest wyzerowany. Jeżeli tak, to przy kolejno odebranych bajtach powinny one być zapisane do elementów tablicy. Tutaj jeszcze fragment kodu odpowiedzialny za nasłuchiwanie:

         public void run() {
            byte[] buffer = new byte[5];  // buffer store for the stream
            int bytes; // bytes returned from read()

            // Keep listening to the InputStream until an exception occurs
            while (true) {
                try {
                    // Read from the InputStream
                    bytes = mmInStream.read(buffer);
                    if(bytes != 0) {
                        
                        mmInStream.read(buffer);
                    }
                    // Send the obtained bytes to the UI activity

                    mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer)
                            .sendToTarget();
                } catch (IOException e) {
                    break;
                }
            }
        }

Program ten pisałem opierając się na znalezionym kodzie w internecie. O ile z wysyłaniem i odbiorem ciągu znaków nie było problemu, tutaj pojawia się problem. Próbowałem odbierać całość jako ciąg znaków, jednak maksymalnie odbieranych było 13 znaków (ja potrzebuję minimum 20), mimo że zwiększałem wielkość bufora odbiorczego, poza tym ta forma transmisji wymagała wprowadzenia opóźnienia za pomocą funkcji SystemClock.sleep(), co w moim przypadku jest niepożądane, ponieważ transmisja powinna odbywać się bez dodatkowych opóźnień.
Podczas próby wysłania dowolnej liczby z terminala, aplikacja przestaje działać i się wyłącza.
Z góry dziękuję za pomoc.
Edit: Toast w pierwszym fragmencie kodu dodałem, aby sprawdzić czy dane odbierane są poprawnie.