再问安卓蓝牙通讯的问题

2019-03-26 12:36发布

本帖最后由 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与安卓论坛
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
chenbingjy
1楼-- · 2019-03-26 22:54
本帖最后由 chenbingjy 于 2015-10-16 15:00 编辑

我是安卓新手,安卓工程是我下载的源码以后改的。
显示数据用的是这句 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){
                                }
                    }
            }
    };
chenbingjy
2楼-- · 2019-03-27 04:30
新的线程程序如下:
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。
chenbingjy
3楼-- · 2019-03-27 07:47
运行的效果是数据发不出去了,而且点击发送按钮几次以后,就会出错。 5.jpg
请问高手,为什么会这样,应该怎么修改?谢谢!
chenbingjy
4楼-- · 2019-03-27 11:19
 精彩回答 2  元偷偷看……
chenbingjy
5楼-- · 2019-03-27 14:34
我还试图把ReadThread线程里的内容移到MyThread线程里,结果也是出现上述错误: 6.jpg
大神给看看,哪里的问题?谢谢

一周热门 更多>