プログラミングは初めてではありませんが、Java と Android についてはかなりの初心者です。アプリは、1 秒に 1 回短いパケットを取得する Bluetooth SPP 受信です。時折、Bluetooth がメッセージの一部を表示し、すぐに残りのメッセージを表示することがあります。これが発生すると、受信スレッドは同じタイプのメッセージをパーサーに送信しますが、内容は異なります。ただし、パーサーは、最初のメッセージの「長さ」を持つ 2 番目のメッセージから「データ」を受け取ります。
これが私のコードで、メッセージを区別するために何をすべきか、またはメッセージが処理されたかどうかについて受信者スレッドをチェックインし、数ミリ秒間スリープしてから再試行する必要があるかどうか疑問に思っています。意見?申し訳ありませんが、私は見ている例から学んでいます。ここで行っていることを行うにはいくつかの方法があると確信しています。
受信機:
protected void receive() {
byte[] recvBuffer = new byte[128];
while(inStream != null) {
try {
int bytesReceived = inStream.read(recvBuffer);
System.out.println("BT-In: ");
String outString = new String(recvBuffer, 0, bytesReceived);
System.out.println(outString);
processReceive.obtainMessage(NEW_DEVICE_DATA, bytesReceived, -1, recvBuffer)
.sendToTarget();
}
catch (IOException e){
WarningBox("Warning", "Receive over Bluetooth did not work, check connection.");
break;
}
}
};
ハンドラー:
Handler processReceive = new Handler() {
@Override
public void handleMessage(Message msg) {
switch(msg.what) {
default:
break;
case NEW_DEVICE_DATA:
byte[] parseInfo = (byte[])msg.obj;
String outString = new String(parseInfo, 0, msg.arg1);
System.out.println("Parse-In: ");
System.out.println(outString);
//ParseReceivedData(parseInfo);
break;
}
}
};
今のところ、データを解析していませんが、リモート デバイスから Bluetooth 経由ですべてを取得し、最終的に画面フィールドを更新するパーサーに適切に送信していることを検証しようとしています。
私のログは次のようになります。
BT-In: ABCabc
パースイン: ABCabc
BT イン: 12
BT イン: 3456789
パースイン: 34
パースイン: 3456789
エラーは、文字列全体が「123456789」であると言う2つのBluetooth受信が互いに近くにあるということですが、「12」と「3456789」の2つの部分で取得し、それらの2つの部分をパーサーに送信しました(メインスレッド)、ハンドラーは 2 つのメッセージを認識しましたが、最初のメッセージはサイズは適切に受け入れられましたが、内容は不適切でした。