私のコードは、USB ホストを介して Arduino から Android フォンでデータを受信します。データ (バイト形式) は文字列出力に変換されます。メソッド updateReceivedData(byte[]) にコードを記述し、データに「警告」ワードが含まれているかどうかをチェックして、警告データを含むメッセージを送信します。
警告メッセージが連続して受信された場合にメッセージを送信する間に遅延を作るためにカウンターを作成しようとします。警告メッセージがない場合はカウンターをリセットします
私の問題は、カウンターが毎回リセットされ、遅延なくメッセージを送信し続けることです。
解決策は、文字列の出力が完了するまで遅延させてから確認することだと思いますが、方法がわかりませんか?
private void updateReceivedData(byte[] data) throws UnsupportedEncodingException {
String Output = new String(data);
if(Output.contains("Warning")){
if (warncounter==0){
Toast.makeText(getBaseContext(), "Warning message sent", Toast.LENGTH_SHORT).show();
SmsManager.getDefault().sendTextMessage(number, null, Output, null, null);
}
warncounter++;
if(warncounter==52) warncounter=0;
}
else warncounter=0;
mDumpTextView.append(Output);
mScrollView.smoothScrollTo(0, mDumpTextView.getBottom());
}
問題を見つけるためのアプローチを作成するために、このコードを試します
private void updateReceivedData(byte[] data) throws UnsupportedEncodingException {
String Output = new String(data);
if(Output.contains("Warning")){
SmsManager.getDefault().sendTextMessage(number, null, Output, null, null);
}
}
mDumpTextView.append(Output);
mScrollView.smoothScrollTo(0, mDumpTextView.getBottom());
}
2 番目のコードでは、すべての受信データに警告を含めます。その結果、最初のメッセージには出力文字列全体が含まれますが、最初のメッセージの後、すべての受信メッセージが削除されます (データが開始前に完全に文字列に変換されなかったことが原因である可能性があります)。送信文字列)
注: データは Arduino から 1 秒ごとに送信され、スクロールビュー テキストのデータは 100% 正しく表示されます (これは、データが String に変換されたことを示しますが、問題はおそらく時間がかかることです)。
ですから、助けてください、または提案してください