android 蓝牙发送和接收有冲突

本文探讨了一款APP在通过蓝牙向主机发送指令并接收数据过程中遇到的问题:接收到的数据偶尔包含发送命令的部分内容。文章提供了发送命令和接收数据的具体代码实现,并邀请读者共同分析可能的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我的app设计为 
1.向主机发送开始命令
2蓝牙循环接收从主机发送的数据
问题:接收到的数据中第一位数据有时候会是发送命令的第一位
比如:我发送“UP”给主机 正常接收数据为“123456” 异常情况就会出现“D123456”

不知道是为什么

代码如下:
这里是发送命令“UP”

ScanButton.setOnTouchListener(new Button.OnTouchListener(){
public boolean onTouch(View v, MotionEvent event) {
String message;
byte[] msgBuffer;
int action = event.getAction();
switch(action)
{
case MotionEvent.ACTION_UP:
 try {
                    os = _socket.getOutputStream();
                 } catch (IOException e) {
                     Log.e(TAG, "ON RESUME: Output stream creation failed.", e);
                 }
                 message = "UP\n";
                 msgBuffer = message.getBytes();
                 try {
                   os.write(msgBuffer);
                 } catch (IOException e) {
                    Log.e(TAG, "ON RESUME: Exception during write.", e);
                 }
                 break;
}
return false;
}
    });

这里是接收
Thread ReadThread = new Thread() {
public void run() {
int num = 0;
int i=0;
int TotalNum = 0;
byte[] buffer = new byte[150];
bRun = true;
// 接收线程
while (true) {
try {
while (is.available() == 0) {
while (bRun == false) {
}
}
while (true) {
num = is.read(buffer); // 读入数据buffer 打印出来不对 必须转换为其它类型才能打印查看
String s = new String(buffer, 0, num);
smsg += s; // 写入接收缓存
TotalNum += num;
if(TotalNum >= 100){
byte[] data = smsg.getBytes();
for(i = 0; i < 50; i++){
ImageY[i] = data[count++];
ImageX[i] = data[count++];
}
TotalNum = 0;
smsg="";
break;
}
}
handler.sendMessage(handler.obtainMessage());// 发送显示消息,进行显示刷新
} catch (IOException e) {
}
}
}
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值