本帖最后由 chenbingjy 于 2015-10-16 15:23 编辑
我在搞安卓蓝牙通讯,用手机和单片机板子上的蓝牙通讯。
手机给板子上的蓝牙模块发数据,蓝牙模块收到数据再回复给手机。
手机收到数据再显示。可是领导要求显示16进制,比如AA AA AA 96 30 EF 20 DB ....
可是显示的是ASCII字符。安卓手机接收数据程序如下:
//接收数据线程
Thread ReadThread=new Thread(){
public void run(){
int num = 0;
byte[] buffer = new byte[1024];
byte[] buffer_new = new byte[1024];
int i = 0;
int n = 0;
bRun = true;
//接收线程
while(true){
try{
while(is.available()==0){
while(bRun == false){}
}
while(true){
num = is.read(buffer); //读入数据
n=0;
String s0 = new String(buffer,0,num);
fmsg+=s0; //保存收到数据
for(i=0;i<num;i++){
if((buffer
== 0x0d)&&(buffer[i+1]==0x0a)){
buffer_new[n] = 0x0a;
i++;
}else{
buffer_new[n] = buffer;
}
n++;
}
String s = new String(buffer_new,0,n);
smsg+=s; //写入接收缓存
break; //短时间没有数据才跳出进行显示
}
//发送显示消息,进行显示刷新
handler.sendMessage(handler.obtainMessage());
}catch(IOException e){
}
}
}
};
此帖出自
Linux与安卓论坛
我是安卓新手,安卓工程是我下载的源码以后改的。
显示数据用的是这句 handler.sendMessage(handler.obtainMessage());
显示出来是ASCII码。我想把它转化为HEX格式。
我想加一个线程,因为要用到文本框,我在一个群里听人说要用这个线程方法:
runOnUiThread(new Runnable() {
我把代码写成这样,先试试能不能显示16进制。
//接收数据线程
Thread ReadThread=new Thread(){
public void run(){
int num = 0;
byte[] buffer = new byte[1024];
byte[] buffer_new = new byte[1024];
int i = 0;
int n = 0;
bRun = true;
//接收线程
while(true){
try{
while(is.available()==0){
while(bRun == false){}
}
while(true){
num = is.read(buffer); //读入数据
n=0;
String s0 = new String(buffer,0,num);
fmsg+=s0; //保存收到数据
for(i=0;i<num;i++){
if((buffer == 0x0d)&&(buffer[i+1]==0x0a)){
buffer_new[n] = 0x0a;
i++;
}else{
buffer_new[n] = buffer;
}
n++;
}
String s = new String(buffer_new,0,n);
smsg+=s; //写入接收缓存
Readflag=true; //加了这句
break; //短时间没有数据才跳出进行显示
}
//发送显示消息,进行显示刷新
// handler.sendMessage(handler.obtainMessage()); 这句注释掉,防止干扰
}catch(IOException e){
}
}
}
};
Thread MyThread=new Thread(){
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
while(true)
{
try{
Thread.sleep(100);
}catch(Exception e){
e.printStackTrace();
}
if(Readflag==true){
String s4 = Integer.toHexString(ccb);
dis.setText(s4);
ccb++;
Readflag=false;
}
}
}
});
}
};
我的意图是每发送一次数据,Readflag=true,执行上面这个线程,显示一次ccb的值。
然后ccb加1.Readflag=flase.同时线程休眠100ms。
请问高手,为什么会这样,应该怎么修改?谢谢!
大神给看看,哪里的问题?谢谢
一周热门 更多>