1

Bluetoothの入力ストリームの値を継続的にチェックする関数があります:

private final Runnable refresh_input = new Runnable() {

    @Override
    public void run() {
        bt_read_input = GlobalVar.bt_input;
        refresh_handler.postDelayed(refresh_input, 250);
    }
};

次に、Bluetooth 経由で 16 進文字列を送信し、上記の変数をチェックしbt_read_inputて応答が受信されたかどうかを確認する別の関数。

答えは、のような別の 16 進文字列です2b0000

この回答を受け取った場合、アプリは問題なく動作します。しかし、アプリがクラッシュすることがあります。これは、完全な文字列を受信する代わりに、次のような 2 回で受信することがあることに気付きました。

1. 2b
2. 0000

したがって、これをチェックする関数を実装する必要があります。この関数は、受信した byte[] の長さが 3 バイト (2b0000 = 3byte) の場合は問題ないと思いますが、3 より小さい場合は、受信した部分を新しい byte[] に追加する必要があります。 、欠落している部分を再度確認し、それを追加して完全なバイト[]を取得します。

この機能を次のように開始しました。

private byte[] ConfMsgCheck(byte[] b) {  //b = bt_read_input 
    byte[] ConfByte = new byte[3];

    if (b.length == 3) {
        ConfByte = b;
    }
    else if (b.length < 3) {
        ConfByte = b;
        //here is where I don't know how to continue, because I should do something like a loop
        //that checks again the value of b (bt_read_input) and adds it again to ConfByte.

    }
    return ConfByte;
}
4

0 に答える 0