BluetoothChat (ボット Java と MonoForAndroid で同じコードを信じている) のサンプル アプリに問題があります。Bluetooth モジュールを使用して Android をマイクロコントローラーに接続しました。メッセージを送信する場合 (マイクロコントローラへの生のバイトのみ) は問題なく動作します!
マイクロコントローラは一定のシリアル メッセージをストリーミングしており、そのデータを読み取りたいと考えています。次のようなコード ブロックを持つBluetoothChat.csMyHandler
アプリで名前が付けられたクラスがあります。
case MESSAGE_READ:
byte[] readBuf = (byte[])msg.Obj;
// construct a string from the valid bytes in the buffer
var readMessage = new Java.Lang.String (readBuf, 0, msg.Arg1);
bluetoothChat.conversationArrayAdapter.Add(
bluetoothChat.connectedDeviceName + ": " + readMessage);
break;
だから私がする必要があるのは、入ってくる生データを処理してから、いくつかのボタンの色を変更することです。そのため、上記のコードに次の変更を加えました。
case MESSAGE_READ:
byte[] readBuf = (byte[])msg.Obj;
//I have just added this code and it blocks the UI
bluetoothChat.ProcessIncomingData(readBuff);
break;
そして、BluetootChat
アクティビティには次のメソッドがあります。
public void ProcessIncomingData(byte[] readBuf)
{
if (_logBox != null)
{
_logBox.Text += "\r\n"; //TextView
foreach (var b in readBuf)
{
_logBox.Text += (uint)b + " "; //Show the bytes as int value
}
}
}
`
残念ながら、私が行った変更により、UI が停止し、しばらくするとアプリがクラッシュします。
UIをフリーズせずにこれをうまく行う方法はありますか?