各位大大好,我是java小白+安卓小白,最近遇到一个头疼的问题:
我在创建蓝牙连接之后,开启新线程读取数据:(以下为线程类里的代码)
Thread ReadThread=new Thread(){
//开辟缓冲区buffer
byte[] buffer = new byte[1024];
int k=1;
int num=0;
public void run(){
try {
while(count==0)
{
Log.e(TAG, "等待");
count =is1.available();
}
while(true){
Log.e(TAG, "读入数据");
Log.e(TAG, "k="+k);
k++;
num = inputstream.read(buffer); //读入数据
Log.e("TAG", "num="+num);
Log.e("TAG", "buffer="+buffer);
String ss=toHexString1(buffer);//调用byte-->string方法
//data=inputstream.read();
if(is1.available()==0){
Log.e("TAG", "break");
break;
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
k是inputStream.read()执行的次数,num是读取进来的字节数量
大概就这样执行12次左右(k++到12,11次num显示为1024,最后一次只有30~50),logcat 输出“break”,也就是说此时is1.available()==0
可是我的蓝牙数据是一直不停得发送啊,求问各位大大为什么呢?
还有就是,有一次我在if(is1.available()==0)之前写了data=is1.read();就出现了
k++不停,而每一次num都是有几十,这时候数据还可靠吗?为什么会出现这种情况呢?
遇到了同样的问题,虽然觉得可能2015年都没有人来回答,但是留个记号,如果解决了一定回来解答
最近解决了这个问题啦!!!是因为长时间客户端对蓝牙模块没有进行操作,而Android中连接蓝牙的时候没有操作120s之后就会自动断开连接的。
可以定时发送心跳包,从客户端向蓝牙模块发送一个没有意义的不需要解析的命令就可以了。具体可以看看我写的这个,还有问题的话,可以再问。
我也是遇到这个问题好久才解决的。http://blog.csdn.net/pursue16/article/details/72026941