android 蓝牙发送和接收有冲突

诸葛非常的亮 2015-11-27 02:17:50
我的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) {
}
}
}
};
...全文
359 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
诸葛非常的亮 2016-05-11
  • 打赏
  • 举报
回复
忘了结贴,最后我在主机蓝牙发送端设置握手协议,在手机端也设置握手协议(比如:发送信息a前面加上头“INFO”,发送图片b前面加上头“PIC”,在手机端接收时先判断头再接收这样就可以了),只是蓝牙的有些垃圾数据还是不知道怎样产生的。
诸葛非常的亮 2015-12-07
  • 打赏
  • 举报
回复
引用 4 楼 a87b01c14 的回复:
你为什么读到长度大于100才操作数据? 主机那边发送数据后面也加\n, 你直接调用readLine()
readline一次能读多少个数据呢?要是数据量比较大 是不是也得分次来读?
诸葛非常的亮 2015-12-07
  • 打赏
  • 举报
回复
引用 2 楼 txfast 的回复:
我用蓝牙通讯没有碰到过这个问题,如果接收到自己发出去的数据,还出错。这个需要考虑主机的程序的响应是否正确的问题,另外看下自己代码里接受和发送数据是否用同一个字节数组来缓存的,不要弄错offset就好了
即使是一个buf也是会出现这种情况 ,我的接收是实时循环的,发送是按键去发送“UP”或“DOWN”这两个字符串的,不知道怎样能在发送时锁住接收。
sanxiaochengyu 2015-12-03
  • 打赏
  • 举报
回复
你为什么读到长度大于100才操作数据? 主机那边发送数据后面也加\n, 你直接调用readLine()
诸葛非常的亮 2015-12-03
  • 打赏
  • 举报
回复
引用 2 楼 txfast的回复:
我用蓝牙通讯没有碰到过这个问题,如果接收到自己发出去的数据,还出错。这个需要考虑主机的程序的响应是否正确的问题,另外看下自己代码里接受和发送数据是否用同一个字节数组来缓存的,不要弄错offset就好了
好的 , 我先试试。
anabiosispe 2015-11-29
  • 打赏
  • 举报
回复
我用蓝牙通讯没有碰到过这个问题,如果接收到自己发出去的数据,还出错。这个需要考虑主机的程序的响应是否正确的问题,另外看下自己代码里接受和发送数据是否用同一个字节数组来缓存的,不要弄错offset就好了
诸葛非常的亮 2015-11-27
  • 打赏
  • 举报
回复
每次在接收数据过程中 只要点击命令按键,就会出现接收错乱

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧