2994|5

3241

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

再问安卓蓝牙通讯的问题 [复制链接]

本帖最后由 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                                                     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){
                                }
                    }
            }
    };

点赞 关注
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。

回复
举报

3241

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
本帖最后由 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                                                     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){
                                }
                    }
            }
    };
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 

回复

3241

帖子

0

TA的资源

纯净的硅(高级)

板凳
 
新的线程程序如下:
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。
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 
 

回复

3241

帖子

0

TA的资源

纯净的硅(高级)

4
 
运行的效果是数据发不出去了,而且点击发送按钮几次以后,就会出错。
请问高手,为什么会这样,应该怎么修改?谢谢!
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 
 

回复

3241

帖子

0

TA的资源

纯净的硅(高级)

5
 
补充:我原来把改成16进制的代码加到 ReadThread这个线程里,没效果。
一个群里的朋友告诉我,我记不清怎么说的了,大概意思是:textView显示要在
runOnUiThread(new Runnable() 这种线程里,什么Ui,否则不显示。
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 
 

回复

3241

帖子

0

TA的资源

纯净的硅(高级)

6
 
我还试图把ReadThread线程里的内容移到MyThread线程里,结果也是出现上述错误:
大神给看看,哪里的问题?谢谢
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表