关于Android通过蓝牙接收的数据发生丢失的问题

背景:我现在在做手机端与单片机通过蓝牙进行数据传递。
问题:在我通过蓝牙接收单片机通过串口发来的数据的时候,出现了:
1:大量为0的无用数据;
2:缺失部分数据;
接收代码如下。

        while(true){
                        try {
                            num = inputStream.read(buffer_z);
                            n=0;
                            for(i=0;i<num;i++){
                                buffer_z_new[n] = buffer_z[i];
                                n++;
                            }

                            String s =bytesToHexString(buffer_z_new);
                            smsg+=s.trim();

                            if(inputStream.available()==0)break;
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }

                    StringBuffer stringBuffer = new StringBuffer();
                    String a = smsg.replace("FB0000",",");
                    String[] b = a.split(",");
                    String c = b[1].replace("1000",",");
                    String[] d = c.split(",");
                    stringBuffer.append(d[1]);
                    String ends = stringBuffer.toString();

                    Message msg = new Message();
                    Bundle data = new Bundle();
                    data.putByteArray("bytes",ends.getBytes());
                    msg.what = MainActivity.ACCEPT_MESSAGE;
                    msg.setData(data);
                    handler.sendMessage(msg);

我该如何解决呢?

3个回答

你这个问题我也遇到过:
1.大量为0的无用数据应该是你的byte数组声明的长度太大了,这样没有数据的部分默认就是0,你可以这样声明的byte数组
byte [] b = new byte[inputStream.available()];
2.数据丢失问题有可能是蓝牙分段传输了,也可能是丢包了,分段问题你可以让单片机设备研发人员把给你发送的数据加上很好区别的头和尾,这样你就可以知道你收到的是否是一条完整的数据,如果不是就先把这个数组缓存起来,这样就可以解决了,丢包问题可能就是蓝牙设备连接不太稳定了。

sinat_21795151
sinat_21795151 这个问题后面又解决吗?我这边也遇到类似的问题了
大约 2 个月之前 回复
zxdynamite
zxdynamite byte我声明的是1024,因为本身传过来的数据就很大,我一开始尝试直接去做处理,但是失败了,然后我声明长度,并进行循环;有头有尾的,但是现在我缺失的一部分里面包括了尾。
2 年多之前 回复

我在字符串截取操作中将在数据一开始出现的大量为0的无用数据截取掉了,现在的遗留的问题是:数据的缺失。
一开始我发送handler的是obtainMessage,后来发现这个方法虽然效率快但是或会发现数据缺失问题,但是我改用sendMessage之后,数据缺失问题
依然没有改变。
我该怎么去处理呢?

数据流并不是连续的,在接收第一帧数据后,你使用break跳出了while(true)循环,后面的数据就没有了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Android程序通过蓝牙接收蓝牙设备传递过来的数据

在edittext上显示蓝牙设备传递过来的数据,并根据数据数值的变化,随时更改edittext里的值. 求教大神

android蓝牙串口接收数据

最近在做android手机蓝牙和单片机通信,一直被接收数据完整性这个问题困扰。 为了使一次通信的包保持完整,我就构思了发送12位的包,包头(1)+数据(8)+校验(2)+包尾(1),校验为求和校验。单片机发送数据的函数如下 void SendString(uchar *dat) //发送12位的包 包头(1)+数据(8)+校验(2)+包尾(1) { uchar i,j; uint check=0; //求和校验 SendChar(0x01); //0x01 SOH --> start of heading i=strlen(dat); for(j=0;j<i;j++) //发送数据 { SendChar(dat[j]); check+=dat[j]; } for(j=8-i;j>0;j--) { SendChar(0x20); //用0x20 space 补齐未满数据位 check+=0x20; } SendChar((uchar)(check>>8)); //校验位高位 SendChar((uchar)(check&0x00ff)); //校验位低位 SendChar(0x04); //0x04 EOT --> end of transmission } 这段是单片机间隔一段时间发送包,已在电脑端串口助手里测试过了,发送正常 while(1) { delay_ms(1000); SendString("test1234"); } 然后接收包的java代码 public void run() { Log.i(TAG, "BEGIN mConnectedThread"); StringBuffer buffer = new StringBuffer(); int SumCheck = 0, SumRec; int i = 0, j, dat; while (true) { try { int count = mmInStream.available(); while (count < 12) { count = mmInStream.available(); } int SOH = mmInStream.read(); Log.i(TAG, "SOH=" + SOH); while (SOH != 1) { i++; if (i >10) { break; } SOH = mmInStream.read(); Log.i(TAG, "SOH=" + SOH); } count = mmInStream.available(); if ((i < 11) && (count <=11)) { while (count < 11) { count = mmInStream.available(); } } else { continue; } for (j = 0; j < 8; j++) { dat = mmInStream.read(); buffer.append(dat); SumCheck += dat; } SumRec = mmInStream.read(); SumRec = (SumRec << 8) | (mmInStream.read()); Log.i(TAG, "SumCheck=" + SumCheck + "\nSumRec" + SumRec); if ((SumCheck == SumRec) && (mmInStream.read() == 4)) { String s = buffer.toString(); byte[] bits = s.getBytes("UTF-8"); mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, 8, -1, bits).sendToTarget(); // 送入消息池 Log.i(TAG, "buffer=" + s); } buffer.delete(0, 7); SumCheck = 0; i = 0; } catch (IOException e) { Log.e(TAG, "disconnected", e); connectionLost(); break; } } } (其他部分的代码参考了android example API-9 bluetoothchat) 但是这段按照包头(1)+数据(8)+校验(2)+包尾(1)来接受校验数据,运行不正常 logcat输出如下 05-16 23:31:21.360: D/BluetoothChatService(17686): create ConnectedThread 05-16 23:31:21.360: I/BluetoothChatService(17686): END mAcceptThread 05-16 23:31:21.400: D/BluetoothChatService(17686): setState() 2 -> 3 05-16 23:31:21.400: I/BluetoothChatService(17686): BEGIN mConnectedThread 05-16 23:31:21.410: I/BluetoothChat(17686): MESSAGE_STATE_CHANGE: 3 05-16 23:31:21.480: I/BluetoothChatService(17686): SOH=1 05-16 23:31:21.490: I/BluetoothChatService(17686): SOH=116 05-16 23:31:21.490: I/BluetoothChatService(17686): SOH=101 05-16 23:31:21.490: I/BluetoothChatService(17686): SOH=115 05-16 23:31:21.490: I/BluetoothChatService(17686): SOH=116 05-16 23:31:21.490: I/BluetoothChatService(17686): SOH=49 05-16 23:31:21.500: I/BluetoothChatService(17686): SOH=50 05-16 23:31:21.500: I/BluetoothChatService(17686): SOH=51 05-16 23:31:21.500: I/BluetoothChatService(17686): SOH=52 05-16 23:31:21.530: I/BluetoothChatService(17686): SOH=2 05-16 23:31:21.530: I/BluetoothChatService(17686): SOH=138 05-16 23:31:21.530: I/BluetoothChatService(17686): SOH=4 05-16 23:31:21.530: I/BluetoothChatService(17686): SOH=1 05-16 23:31:21.530: I/BluetoothChatService(17686): SOH=116 05-16 23:31:21.530: I/BluetoothChatService(17686): SOH=101 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=115 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=116 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=49 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=50 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=51 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=52 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=2 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=138 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=4 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=1 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=116 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=101 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=115 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=116 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=49 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=50 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=51 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=52 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=2 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=138 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=4 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=1 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=116 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=101 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=115 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=116 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=49 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=50 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=51 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=52 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=2 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=138 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=4 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=1 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=116 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=101 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=115 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=116 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=49 05-16 23:31:21.540: I/BluetoothChatService(17686): SOH=50 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=51 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=52 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=2 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=138 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=4 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=1 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=116 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=101 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=115 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=116 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=49 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=50 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=51 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=52 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=2 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=138 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=4 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=1 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=116 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=101 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=115 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=116 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=49 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=50 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=51 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=52 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=2 05-16 23:31:21.550: I/BluetoothChatService(17686): SOH=138 05-16 23:31:21.560: I/BluetoothChatService(17686): SOH=4 05-16 23:31:21.560: I/BluetoothChatService(17686): SOH=1 05-16 23:31:21.560: I/BluetoothChatService(17686): SOH=116 05-16 23:31:21.560: I/BluetoothChatService(17686): SOH=101 05-16 23:31:21.560: I/BluetoothChatService(17686): SOH=115 05-16 23:31:21.560: I/BluetoothChatService(17686): SOH=116 05-16 23:31:21.560: I/BluetoothChatService(17686): SOH=49 05-16 23:31:21.560: I/BluetoothChatService(17686): SOH=50 05-16 23:31:21.560: I/BluetoothChatService(17686): SOH=51 05-16 23:31:21.560: I/BluetoothChatService(17686): SOH=52 05-16 23:31:21.560: I/BluetoothChatService(17686): SOH=2 05-16 23:31:21.560: I/BluetoothChatService(17686): SOH=138 05-16 23:31:21.560: I/BluetoothChatService(17686): SOH=4 05-16 23:31:21.560: I/BluetoothChatService(17686): SOH=1 05-16 23:31:21.560: I/BluetoothChatService(17686): SOH=116 05-16 23:31:21.560: I/BluetoothChatService(17686): SOH=101 05-16 23:31:21.570: I/BluetoothChatService(17686): SOH=115 05-16 23:31:21.570: I/BluetoothChatService(17686): SOH=116 05-16 23:31:21.570: I/BluetoothChatService(17686): SOH=49 05-16 23:31:21.570: I/BluetoothChatService(17686): SOH=50 05-16 23:31:21.570: I/BluetoothChatService(17686): SOH=51 05-16 23:31:21.570: I/BluetoothChatService(17686): SOH=52 05-16 23:31:21.570: I/BluetoothChatService(17686): SOH=2 05-16 23:31:21.570: I/BluetoothChatService(17686): SOH=138 05-16 23:31:21.570: I/BluetoothChatService(17686): SOH=4 05-16 23:31:21.570: I/BluetoothChatService(17686): SOH=1 05-16 23:31:21.570: I/BluetoothChatService(17686): SOH=116 05-16 23:31:21.580: I/BluetoothChatService(17686): SOH=101 05-16 23:31:21.580: I/BluetoothChatService(17686): SOH=115 05-16 23:31:21.580: I/BluetoothChatService(17686): SOH=116 05-16 23:31:21.580: I/BluetoothChatService(17686): SOH=49 05-16 23:31:21.580: I/BluetoothChatService(17686): SOH=50 05-16 23:31:21.580: I/BluetoothChatService(17686): SOH=51 logcat到此停了。。。内容可能有些多,但跪求各位帮忙看看,问题出在哪儿

android怎么实现蓝牙实时接收数据 inputstream

现在在做一个APP 单片机通过蓝牙模块 将数据发送到手机上并显示 现在搜索蓝牙 配对 连接都没问题 但是做到接收数据这一步的时候遇到了一些问题 首先是 调用inputstream函数的时候 程序会阻塞 (我也看了资料说是放到线程里 但是放进去之后 却不能实时接收了 或者说是不能接收完全) 然后是 我想设置一个 开始接收的按钮 按一下就开始自动接收 再按另一个就停止接收 然后这一部分又怎么实现 有没有大神可以帮我?求助! (我现在用的是Handler线程 用了postdelay方法来掩饰接收更新,然后用了OnTouch检测按钮是否按下 按下就接收 松开就停止)但现在我想换成例如 OnClick的接口 怎么办? 以下是 handler 函数 求大神帮忙! ``` class btnlistener implements OnTouchListener{ @Override public boolean onTouch(View v, MotionEvent event) { // TODO 自动生成的方法存根 if (event.getAction()==MotionEvent.ACTION_DOWN) { System.out.println(message+"I m motion"); revhandler.post(ReciveMsg); } else if (event.getAction() == MotionEvent.ACTION_UP) { revhandler.removeCallbacks(ReciveMsg); } return false; } } Handler revhandler = new Handler(); Runnable ReciveMsg = new Runnable() { public void run() { int i =0; try{ InputStream inputStream = bluetoothSocket.getInputStream(); byte data[]= new byte[5]; while((i=inputStream.read(data))!=-1){ if(inputStream.available()==0){ break; } message = new String(data); System.out.println(message); textV.setText(message); } } catch(IOException e){ e.printStackTrace(); } revhandler.postDelayed(ReciveMsg,200); } }; ```

android与蓝牙模块进行数据交互

求android源码与蓝牙模块进行数据交互,类似于蓝牙小车那种的,蓝牙模块的数据发送到android并成功显示

android蓝牙实时接收数据接收一次后就不循环了为什么?

单片机0.5秒通过蓝牙发一次数据过来,android开启一个线程进行接收,线程里面是循环接收的,现在接收一次之后就不再接收了,循环也不起作用,这是为什么?部分程序如下 //存储文件并显示的线程 private class saveimageThread extends Thread { public saveimageThread(BluetoothSocket btSocket) { while(saveflag==0) { InputStream tmpIn =null; inStream=null; try { tmpIn=btSocket.getInputStream(); } catch (IOException e) { Log.e(TAG,"temp scoket not created",e); } inStream=tmpIn; saveflag=1; } } @Override public void run() { while(D) { int picname=1; Log.i("saveimage","start"); try{ byte[] buffer=new byte[1024]; //dri为保存路径,SD卡中的carImage文件夹 //从蓝牙获取输入流 while (inStream!=null) { Log.e("","InputStream"); int l = -1; try{ while((l = inStream.read(buffer)) != -1) //l = inStream.read(buffer); { ByteArrayOutputStream outStream=new ByteArrayOutputStream(); outStream.write(buffer,0,buffer.length); //inStream.close(); byte[] data = outStream.toByteArray(); Log.e("","data is ready!"); 略 } //while((l = inStream.read(buffer)) != -1) }catch (Exception e){ e.printStackTrace();} //byte[] data=new byte[j-3]; //out.write(buffer,0,buffer.length); //buffer=null; break; } //while (inStream!=null) } catch (Exception e){ e.printStackTrace(); System.err.println("Can't start"); } try { sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //while(D) } }

蓝牙串口通信数据接收问题

各位高人,我在做一个关于蓝牙串口通信的项目,现在涉及到接收返回的数据并进行处理。 现在的问题是数据总是接收不全。接收的数据有两种格式,1.以F2或F5开头的三个字节的 数据。2 是以F1 开头的12个字节的数据。以下是我接收的数据 03-12 14:08:03.214: D/BluetoothService(31197): --buffer.length is: 12. InStream.read() buffer is: f12140001000000304000076 03-12 14:08:04.144: D/BluetoothService(31197): --buffer.length is: 1. InStream.read() buffer is: f1 03-12 14:08:04.178: D/BluetoothService(31197): --buffer.length is: 11. InStream.read() buffer is: 2100001000000304000036 03-12 14:08:05.140: D/BluetoothService(31197): --buffer.length is: 1. InStream.read() buffer is: f1 03-12 14:08:05.172: D/BluetoothService(31197): --buffer.length is: 10. InStream.read() buffer is: 21400010000003040000 03-12 14:08:05.173: D/BluetoothService(31197): --buffer.length is: 1. InStream.read() buffer is: 76 03-12 14:08:05.223: D/BluetoothService(31197): --buffer.length is: 1. InStream.read() buffer is: f1 03-12 14:08:05.225: D/BluetoothService(31197): --buffer.length is: 9. InStream.read() buffer is: 214000100000030300 03-12 14:08:05.258: D/BluetoothService(31197): --buffer.length is: 2. InStream.read() buffer is: 0071 03-12 14:08:08.711: D/BluetoothService(31197): --buffer.length is: 12. InStream.read() buffer is: f12100001000000303000031 03-12 14:08:09.664: D/BluetoothService(31197): --buffer.length is: 1. InStream.read() buffer is: f1 03-12 14:08:09.665: D/BluetoothService(31197): --buffer.length is: 9. InStream.read() buffer is: 214000100000030300 03-12 14:08:09.698: D/BluetoothService(31197): --buffer.length is: 2. InStream.read() buffer is: 0071 03-12 14:08:15.959: D/BluetoothService(31197): --buffer.length is: 12. InStream.read() buffer is: f12100001000000303000031 03-12 14:08:17.244: D/BluetoothService(31197): --buffer.length is: 12. InStream.read() buffer is: f12100001000003c0300000e 03-12 14:08:17.681: D/BluetoothService(31197): --buffer.length is: 11. InStream.read() buffer is: f12100001000003c033000 03-12 14:08:17.692: D/BluetoothService(31197): --buffer.length is: 1. InStream.read() buffer is: 3e 03-12 14:08:18.374: D/BluetoothService(31197): --buffer.length is: 1. InStream.read() buffer is: f1 03-12 14:08:18.388: D/BluetoothService(31197): --buffer.length is: 10. InStream.read() buffer is: 2100001000003c043000 03-12 14:08:18.395: D/BluetoothService(31197): --buffer.length is: 1. InStream.read() buffer is: 39 03-12 14:08:20.252: D/BluetoothService(31197): --buffer.length is: 12. InStream.read() buffer is: f12100001000000204000037 03-12 14:08:22.713: D/BluetoothService(31197): --buffer.length is: 12. InStream.read() buffer is: f12100001000000203000030 03-12 14:08:26.756: D/BluetoothService(31197): --buffer.length is: 12. InStream.read() buffer is: f12140001000000203000070 03-12 14:08:30.268: D/BluetoothService(31197): --buffer.length is: 12. InStream.read() buffer is: f12140001000001a03000068 03-12 14:08:31.775: D/BluetoothService(31197): --buffer.length is: 12. InStream.read() buffer is: f10100001000001a03000008 03-12 14:08:32.730: D/BluetoothService(31197): --buffer.length is: 10. InStream.read() buffer is: f12140001000001a0300 部分代码如下: public void run() { Log.i(TAG, "BEGIN mConnectedThread"); byte[] buffer = new byte[12]; byte[] tempBuffer = new byte[100]; int bytes; int index = 0; int sum = 0; // Keep listening to the InputStream while connected while (true) { try { // Read from the InputStream if (mmInStream.available() > 0) { if (D) Log.d(TAG, mmInStream.available() + " 1 mminsream---" + index + " " + sum + " " +tempBuffer[0]+ (tempBuffer[0] == (byte) 0xF1)+ " (tempBuffer[0]==(byte)0xF5)=" + (tempBuffer[0] == (byte) 0xF5) + " (tempBuffer[0]==(byte)0xF2)=" + (tempBuffer[0] == (byte) 0xF2)); bytes = mmInStream.read(buffer); byte[] arr = new byte[bytes]; if (buffer[0] == (byte) 0xF1 || buffer[0] == (byte) 0xF5 || buffer[0] == (byte) 0xF2 || sum > 12) { index = 0; sum = 0; } System.arraycopy(buffer, 0, arr, 0, bytes); for (int i = 0; i < bytes; i++) { if (i > 0 && (arr[i] == (byte) 0xF1 || arr[i] == (byte) 0xF2 || arr[i] == (byte) 0xF5)) { Log.d(TAG, "break i =" + i + (i > 0 && (arr[i] == (byte) 0xF1 || arr[i] == (byte) 0xF2 || arr[i] == (byte) 0xF5))); break; } tempBuffer[i + index] = arr[i]; sum++; } if (D) Log.d(TAG, mmInStream.available() + " 2 mminsream---" + index + " " + sum + " (tempBuffer[0]==(byte)0xF1)=" + (tempBuffer[0] == (byte) 0xF1) + " (tempBuffer[0]==(byte)0xF5)=" + (tempBuffer[0] == (byte) 0xF5) + " (tempBuffer[0]==(byte)0xF2)=" + (tempBuffer[0] == (byte) 0xF2) + " sum=" + sum); index = index + bytes; if (sum == 12 && tempBuffer[0] == (byte) 0xF1) { // Send the obtained bytes to the UI Activity Bundle bundle = new Bundle(); bundle.putInt(BUNDLE_TYPE, MainActivity.MESSAGE_READ); bundle.putByteArray("buffer", tempBuffer); bundle.putInt("length", sum); showMessage(bundle); index = 0; sum = 0; } if (sum == 3 && (tempBuffer[0] == (byte) 0xF2 || tempBuffer[0] == (byte) 0xF5)) { // Send the obtained bytes to the UI Activity Bundle bundle = new Bundle(); bundle.putInt(BUNDLE_TYPE, MainActivity.MESSAGE_READ); bundle.putByteArray("buffer", tempBuffer); bundle.putInt("length", sum); showMessage(bundle); index = 0; sum = 0; } 还请高人指教。

基于Android蓝牙数据传输

基于Android蓝牙数据传输 以及基于Android蓝牙通讯录的传导 和基于Android蓝牙聊天室

Android蓝牙4.0读取数据问题

Android蓝牙4.0读取蓝牙设备电池电量的时候,如果电池电量或充电状态发生改变,硬件说需要开启notify,请问怎么开启呢?

android中ble蓝牙只能接受20字节问题

在android使用ble蓝牙接受数据时,默认只能接受和发送20字节,但是现在接受的数据大于20字节,该怎么处理?参考网上调用requestMtu方法无效,以下为部分代码与sdk版本,请大神帮忙看下什么问题![图片说明](https://img-ask.csdn.net/upload/202003/10/1583821426_212186.jpg)![图片说明](https://img-ask.csdn.net/upload/202003/10/1583821433_911884.jpg)

Android 蓝牙4.0怎么接收设备传输的数据

一直在研究Android蓝牙4.0的app,现在已经借到设备了,设备的低功耗蓝牙4.0能够连接上,但是手机Android的app连接设备之后就没了反应,我也不知道有没有在接收数据,我是在蓝牙设置界面进行的一系列修改。下面是重要的代码: ``` 蓝牙设置界面是个fragment,即BtSetFragment.java 在网上查到的是在GattCallback 中的onCharacteristicChanged用来接收数据, private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback(){ @Override public void onConnectionStateChange(BluetoothGatt gatt,int status,int newState){ String intentAction; if(newState == BluetoothProfile.STATE_CONNECTED){ intentionAction = ACTION_GATT_CONNECTED; broadcastUpdate(intentAction); Log.i(TAG,"Connected to GATT Server"); Log.i(TAG,"Attemping to start service discovery:" + mBLuetoothGatt.diacoverServices()); }else if(newState == BluetoothProfile.STATE_DISCONNECTED){ intentAction = ACTION_GATT_DISCONNECTION; Log.i(TAG,"Disconnected from GATT server."); broadcastUpdate(intentAction); } } @Override public void onCharacteristicChanged(BluetoothGatt gatt,BluetoothGattCharacteristic characteristic){ Log.d(TAG,"onCharacteristicChanged ,接收数据"); broadcastUpdate(ACTION_DATA_AVAILABLE,characteristic); } }; ``` 在网上下载的蓝牙4.0的demo中的函数DeviceScanActivity.java , DeviceControlActivity.java , BluetoothLeService.java这三个函数中的主要的函数都移到了BtSetFragment.java中,不知道怎么去接收并显示接到的蓝牙设备上的数据,求各个大神

Android接收蓝牙数据的时候输出的一直是一个值

用的蓝牙模块给手机发消息,用Service进行广播的,但是无论发什么数字接收到的消息都是同一个数字,蓝牙模块是连接在单片机上的 ``` byte[] buffer = new byte[1024]; // buffer store for the stream int bytes; // bytes returned from read() while (true) { try { // Read from the InputStream bytes = mmInStream.read(buffer); // bytes数组返回值,为buffer数组的长度 String text = bytesToHexString(buffer); sendMainMsg(bytes + ""); } catch (Exception e) { System.out.print("read error"); break; } } ``` 接收数据用的是上面的方法,mmInStream是InputStream

Android开发板接收串口数据偶尔遗失。求解

串口接收消息时大多数是接收的完整数据,极少时数据会丢失![图片说明](https://img-ask.csdn.net/upload/201903/02/1551492185_613663.png) 这个是正常的数据接收, ![图片说明](https://img-ask.csdn.net/upload/201903/02/1551492276_283715.png) 这个数据丢失了。 我将串口连接电脑,在电脑上是完整数据,但是我Android板子上面就数据缺失了。 请大神告知一个求解方法 。 联系方式QQ: 2310704429

安卓怎么调取蓝牙数据

各位大神们,初次做安卓的小项目,遇到了一个瓶颈,望指教! 在网上绝大多数的安卓蓝牙开发实例中,都需要进行搜索附近蓝牙设备然后连接,最后再读取数据; 但是我想,既然能够在安卓系统中的蓝牙应用里已经有搜索和连接功能了,那些步骤是不是就可以在app中省略,直接读取数据了呢? 但是我依旧没有找到这样的解决实例。不知我的描述是否合理,简言之就是能否跳过在app中扫描和连接的步骤,直接调取已经连接的蓝牙的数据呢? 谢谢大家!

Android蓝牙通讯接收到的数据是一段一段的,不能连起来,什么原因?

编写了一个蓝牙通讯的上位机,和单片机通讯,目前用串口通讯助手测试的时候发现,每次给蓝牙串口发一个大串数据的时候,手机上接收到的总是分段显示 比如我发一个“123456789123456789123456789” 手机上接收到则显示“12345”“67891234”“567891”“23456789”等类似的数据,有时候还会丢数据。。。 这是接收到的数据 我直接输出在LogCat上的显示一段一段的 ![图片说明](https://img-ask.csdn.net/upload/201609/26/1474875151_388275.png) 以下是代码 写了一个线程 线程来 处理 Input数据流 然后用hanler.message把数据发送到handler进行打印或者显示 界面还有一个按钮 开控制线程的开始 ``` //handler处理数据 Handler revhandler = new Handler(){ public void handleMessage(android.os.Message msg) { byte[] writeBuf = (byte[]) msg.obj; String writeMessage = new String(writeBuf,0,msg.arg1); textV.setText(writeMessage); System.out.println("---->>>"+writeMessage); }; }; //接收线程 private class receivethread extends Thread{ private final BluetoothSocket mmSocket; private final InputStream mmInStream; public receivethread(BluetoothSocket socket) { mmSocket = socket; InputStream tmpIn = null; try { tmpIn = socket.getInputStream(); } catch (IOException e) { Log.e(TAG, "temp sockets not created", e); } mmInStream = tmpIn; } @Override public void run() { byte[] buffer = new byte[1024]; int bytes; // TODO 自动生成的方法存根 try { while ((bytes = mmInStream.read(buffer))!=-1) { revhandler.obtainMessage(1, bytes, -1, buffer).sendToTarget(); } } } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } }} ``` 求各位大神指导!!

android蓝牙十六进制数据

大神们,求教。 我用蓝牙APP收到从设备发回来的一堆十六进制的数据,然后我该怎么去解析這些数据,在把這些数据做成波形图,第一次搞蓝牙,到這里没思路了。希望大神能帮帮忙!

Android 蓝牙4.0分包传送数据不稳定

现在的项目要求使用蓝牙4.0传送数据,由于数据比较大,需要分包传送,但是使用时经常会发送失败,连续写数据太快的话机会写入失败,但是要是发一个包等回调函数得到发送成功后再放下一个包的话,发送效率就太低了,1000byte的数据要发10多秒,有人遇到到这问题的吗,怎么解决啊?

android 蓝牙数据传输的流程,以及需要注意的问题.

手机之间数据的传输的详细过程,还有 有哪些需要注意的吗?.................

Android开发,在页面跳转后蓝牙接收不到传感器的数据?

在A页面,蓝牙已经连接成功,并且跳转至B页面,B页面需要接收传感器的数据,但接收不到数据,请问哪位大神能指点一二。 (在A页面获取到的信息有: ``` BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); device.getName() device.getAddress() ``` 并将信息添加至listview中 ``` list(device.getName(),device.getAddress(),device); ``` 在A页面可以获取到传感器的信息,我认为可能是代码中的device的问题,但不知道跳转到B页面的时候用什么方法把device传过去。 如果哪位大神有好的建议,麻烦加下QQ:727780098,感激不尽!

android 蓝牙4.0连接3个GATT传感器,数据不稳定

这个bug困扰很久了,求万能的CSDN解答。 手头的项目,用android平板的蓝牙4.0连接三个BLE蓝牙传感器。获取传感器的数据。 蓝牙传感器以每包/20ms的速度发送数据,每包数据16字节。(3个传感器总数据量,不大吧) 在onCharacteristicChanged()回调方法中,获取数据,并发送给业务端。 那么问题来了,3个传感器数据理论上是平均的发过来的; 但是实际接收中,不定期的,某一个传感器会出现3-4s的数据丢失(onCharacteristicChanged()方法没有回调), 单独连接一个传感器,不会出现数据丢失。但是连接3个以后就会出现。 传感器硬件先排除,内存也并没有溢出,蓝牙连接没有断开。只是会出现“数据丢失”。 怀疑是蓝牙4.0底层的问题,或者数据处理队列的问题?不太懂。有没有了解的大神解答下。挺着急的。 gatt1 = btdevice.connectGatt(context, false, new BluetoothGattCallback() {}); 如有没说完全的,请提问,我继续补充。非常感谢

linux下利用/proc进行进程树的打印

在linux下利用c语言实现的进程树的打印,主要通过/proc下的目录中的进程文件,获取status中的进程信息内容,然后利用递归实现进程树的打印

设计模式(JAVA语言实现)--20种设计模式附带源码

课程亮点: 课程培训详细的笔记以及实例代码,让学员开始掌握设计模式知识点 课程内容: 工厂模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、原型模型、代理模式、单例模式、适配器模式 策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式 课程特色: 笔记设计模式,用笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力 笔记标题采用关键字标识法,帮助学员更加容易记住知识点 笔记以超链接形式让知识点关联起来,形式知识体系 采用先概念后实例再应用方式,知识点深入浅出 提供授课内容笔记作为课后复习以及工作备查工具 部分图表(电脑PC端查看):

Python数据分析与挖掘

92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元 &nbsp; 为什么学习数据分析? &nbsp; &nbsp; &nbsp; 人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。 &nbsp; &nbsp; &nbsp; 从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。 &nbsp;&nbsp; 本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。 &nbsp; 二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。 &nbsp; 三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。 &nbsp; 四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。 &nbsp; 五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。

广工操作系统课程设计(文档+代码+可执行文件)

实现作业调度(先来先服务)、进程调度功能(时间片轮转) 实现内存管理功能(连续分配)。 实现文件系统功能(选作) 这些功能要有机地连接起来

Only老K说-爬取妹子图片(简单入门)

安装第三方请求库 requests 被网站禁止了访问 原因是我们是Python过来的 重新给一段 可能还是存在用不了,使用网页的 编写代码 上面注意看匹配内容 User-Agent:请求对象 AppleWebKit:请求内核 Chrome浏览器 //请求网页 import requests import re //正则表达式 就是去不规则的网页里面提取有规律的信息 headers = { 'User-Agent':'存放浏览器里面的' } response = requests.get

linux“开发工具三剑客”速成攻略

工欲善其事,必先利其器。Vim+Git+Makefile是Linux环境下嵌入式开发常用的工具。本专题主要面向初次接触Linux的新手,熟练掌握工作中常用的工具,在以后的学习和工作中提高效率。

Python代码实现飞机大战

文章目录经典飞机大战一.游戏设定二.我方飞机三.敌方飞机四.发射子弹五.发放补给包六.主模块 经典飞机大战 源代码以及素材资料(图片,音频)可从下面的github中下载: 飞机大战源代码以及素材资料github项目地址链接 ————————————————————————————————————————————————————————— 不知道大家有没有打过飞机,喜不喜欢打飞机。当我第一次接触这个东西的时候,我的内心是被震撼到的。第一次接触打飞机的时候作者本人是身心愉悦的,因为周边的朋友都在打飞机, 每

Python数据清洗实战入门

本次课程主要以真实的电商数据为基础,通过Python详细的介绍了数据分析中的数据清洗阶段各种技巧和方法。

2019 Python开发者日-培训

本次活动将秉承“只讲技术,拒绝空谈”的理念,邀请十余位身处一线的Python技术专家,重点围绕Web开发、自动化运维、数据分析、人工智能等技术模块,分享真实生产环境中使用Python应对IT挑战的真知灼见。此外,针对不同层次的开发者,大会还安排了深度培训实操环节,为开发者们带来更多深度实战的机会。

apache-jmeter-5.1.1(Requires Java 8+).zip

。Apache JMeter 5.1.1 (Requires Java 8+),需要jdk8以上的版本。

数通HCNP中文理论全套教材.rar

内涵HCNP-IENP中文理论书-内文,

Python可以这样学(第四季:数据分析与科学计算可视化)

董付国老师系列教材《Python程序设计(第2版)》(ISBN:9787302436515)、《Python可以这样学》(ISBN:9787302456469)配套视频,在教材基础上又增加了大量内容,通过实例讲解numpy、scipy、pandas、statistics、matplotlib等标准库和扩展库用法。

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

我以为我对Mysql事务很熟,直到我遇到了阿里面试官

太惨了,面试又被吊打

2019 AI开发者大会

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们不空谈口号,只谈技术,诚挚邀请AI业内人士一起共铸人工智能新篇章!

图书管理系统(Java + Mysql)我的第一个完全自己做的实训项目

图书管理系统 Java + MySQL 完整实训代码,MVC三层架构组织,包含所有用到的图片资源以及数据库文件,大三上学期实训,注释很详细,按照阿里巴巴Java编程规范编写

Python数据挖掘简易入门

&nbsp; &nbsp; &nbsp; &nbsp; 本课程为Python数据挖掘方向的入门课程,课程主要以真实数据为基础,详细介绍数据挖掘入门的流程和使用Python实现pandas与numpy在数据挖掘方向的运用,并深入学习如何运用scikit-learn调用常用的数据挖掘算法解决数据挖掘问题,为进一步深入学习数据挖掘打下扎实的基础。

C/C++学习指南全套教程

C/C++学习的全套教程,从基本语法,基本原理,到界面开发、网络开发、Linux开发、安全算法,应用尽用。由毕业于清华大学的业内人士执课,为C/C++编程爱好者的教程。

微信公众平台开发入门

本套课程的设计完全是为初学者量身打造,课程内容由浅入深,课程讲解通俗易懂,代码实现简洁清晰。通过本课程的学习,学员能够入门微信公众平台开发,能够胜任企业级的订阅号、服务号、企业号的应用开发工作。 通过本课程的学习,学员能够对微信公众平台有一个清晰的、系统性的认识。例如,公众号是什么,它有什么特点,它能做什么,怎么开发公众号。 其次,通过本课程的学习,学员能够掌握微信公众平台开发的方法、技术和应用实现。例如,开发者文档怎么看,开发环境怎么搭建,基本的消息交互如何实现,常用的方法技巧有哪些,真实应用怎么开发。

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

2021考研数学张宇基础30讲.pdf

张宇:博士,全国著名考研数学辅导专家,教育部“国家精品课程建设骨干教师”,全国畅销书《张宇高等数学18讲》《张宇线性代数9讲》《张宇概率论与数理统计9讲》《张宇考研数学题源探析经典1000题》《张宇考

专为程序员设计的数学课

<p> 限时福利限时福利,<span>15000+程序员的选择!</span> </p> <p> 购课后添加学习助手(微信号:csdn590),按提示消息领取编程大礼包!并获取讲师答疑服务! </p> <p> <br> </p> <p> 套餐中一共包含5门程序员必学的数学课程(共47讲) </p> <p> 课程1:《零基础入门微积分》 </p> <p> 课程2:《数理统计与概率论》 </p> <p> 课程3:《代码学习线性代数》 </p> <p> 课程4:《数据处理的最优化》 </p> <p> 课程5:《马尔可夫随机过程》 </p> <p> <br> </p> <p> 哪些人适合学习这门课程? </p> <p> 1)大学生,平时只学习了数学理论,并未接触如何应用数学解决编程问题; </p> <p> 2)对算法、数据结构掌握程度薄弱的人,数学可以让你更好的理解算法、数据结构原理及应用; </p> <p> 3)看不懂大牛代码设计思想的人,因为所有的程序设计底层逻辑都是数学; </p> <p> 4)想学习新技术,如:人工智能、机器学习、深度学习等,这门课程是你的必修课程; </p> <p> 5)想修炼更好的编程内功,在遇到问题时可以灵活的应用数学思维解决问题。 </p> <p> <br> </p> <p> 在这门「专为程序员设计的数学课」系列课中,我们保证你能收获到这些:<br> <br> <span> </span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">①价值300元编程课程大礼包</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">②应用数学优化代码的实操方法</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">③数学理论在编程实战中的应用</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">④程序员必学的5大数学知识</span> </p> <p class="ql-long-24357476"> <span class="ql-author-24357476">⑤人工智能领域必修数学课</span> </p> <p> <br> 备注:此课程只讲程序员所需要的数学,即使你数学基础薄弱,也能听懂,只需要初中的数学知识就足矣。<br> <br> 如何听课? </p> <p> 1、登录CSDN学院 APP 在我的课程中进行学习; </p> <p> 2、登录CSDN学院官网。 </p> <p> <br> </p> <p> 购课后如何领取免费赠送的编程大礼包和加入答疑群? </p> <p> 购课后,添加助教微信:<span> csdn590</span>,按提示领取编程大礼包,或观看付费视频的第一节内容扫码进群答疑交流! </p> <p> <img src="https://img-bss.csdn.net/201912251155398753.jpg" alt=""> </p>

DDR5_Draft_Spec_Rev05c.pdf

DDR5 spec

Java面试史上最全的JAVA专业术语面试100问 (前1-50)

前言: 说在前面, 面试题是根据一些朋友去面试提供的,再就是从网上整理了一些。 先更新50道,下一波吧后面的也更出来。 求赞求关注!! 废话也不多说,现在就来看看有哪些面试题 1、面向对象的特点有哪些? 抽象、继承、封装、多态。 2、接口和抽象类有什么联系和区别? 3、重载和重写有什么区别? 4、java有哪些基本数据类型? 5、数组有没有length()方法?String有没有length()方法? 数组没有length()方法,它有length属性。 String有length()方法。 集合求长度用

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

本课程适合CCNA或HCNA网络小白同志,高手请绕道,可以直接学习进价课程。通过本预科课程的学习,为学习网络工程师、思科CCNA、华为HCNA这些认证打下坚实的基础! 重要!思科认证2020年2月24日起,已启用新版认证和考试,包括题库都会更新,由于疫情原因,请关注官网和本地考点信息。题库网络上很容易下载到。

C/C++跨平台研发从基础到高阶实战系列套餐

一 专题从基础的C语言核心到c++ 和stl完成基础强化; 二 再到数据结构,设计模式完成专业计算机技能强化; 三 通过跨平台网络编程,linux编程,qt界面编程,mfc编程,windows编程,c++与lua联合编程来完成应用强化 四 最后通过基于ffmpeg的音视频播放器,直播推流,屏幕录像,

Python界面版学生管理系统

前不久上传了一个控制台版本的学生管理系统,这个是Python界面版学生管理系统,这个是使用pycharm开发的一个有界面的学生管理系统,基本的增删改查,里面又演示视频和完整代码,有需要的伙伴可以自行下

2019数学建模A题高压油管的压力控制 省一论文即代码

2019数学建模A题高压油管的压力控制省一完整论文即详细C++和Matlab代码,希望对同学们有所帮助

4小时玩转微信小程序——基础入门与微信支付实战

这是一个门针对零基础学员学习微信小程序开发的视频教学课程。课程采用腾讯官方文档作为教程的唯一技术资料来源。杜绝网络上质量良莠不齐的资料给学员学习带来的障碍。 视频课程按照开发工具的下载、安装、使用、程序结构、视图层、逻辑层、微信小程序等几个部分组织课程,详细讲解整个小程序的开发过程

相关热词 c#对文件改写权限 c#中tostring c#支付宝回掉 c#转换成数字 c#判断除法是否有模 c# 横向chart c#控件选择多个 c#报表如何锁定表头 c#分级显示数据 c# 不区分大小写替换
立即提问
相关内容推荐