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;
}