我在使用 BluetoothChat 时遇到了一些问题(我相信它在 bot Java 和 MonoForAndroid 上的代码相同)示例应用程序。我已使用蓝牙模块将我的 Android 连接到微控制器。如果发送消息(只是原始字节到微控制器)它工作得很好!
微控制器流式传输恒定的串行消息,我想读取该数据。BluetoothChat.cs应用程序中有一个名为的类MyHandler
,其代码块如下:
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 的情况下巧妙地做到这一点?