android应用-蓝牙串口通信数据接收问题

问题描述

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

各位高人,我在做一个关于蓝牙串口通信的项目,现在涉及到接收返回的数据并进行处理。
现在的问题是数据总是接收不全。接收的数据有两种格式,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;
                    }

还请高人指教。

时间: 2024-12-02 19:23:02

android应用-蓝牙串口通信数据接收问题的相关文章

tcp数据接收-TCP通信 数据接收 数据分析

问题描述 TCP通信 数据接收 数据分析 我在用c++做TCP客户端 建立连接之后能够向服务器端发送数据 但是新建立的线程用来接收服务器的回发数据 并进行数据分析 再输出 ~~ 一直接收不到数据~~有木有大神给个例子 参考下 980020740@qq.com

求助:串口通信MSCOMM接收PCOMM传出的数据

问题描述 使用VB.NET做的,用MSCOMM控件接收和发送串口数据,另一头是DELPHI编的用PCOMM发出的数据,发出数据是采用中断方式SIO_BREAK_IRQ,数据发完后会发个break信号sio_write(break),我这边收数据的时候设置Rthreshold=5,但是观察下来,Oncomm事件被不停触发,且触发后收到的数据为空(因为读出的inbufferCount=0,且inPut为空),请问高手们,这是为什么呀?难道一定要PCOMM和PCOMM通信? 解决方案 解决方案二:不一

串口通信 动态曲线-MFC中串口通信获得数据画图问题

问题描述 MFC中串口通信获得数据画图问题 我在WM_PAINT的OnPaint函数中画出坐标系,在OnComm函数中获得串口通信数据,在成员函数OnPaint_Draw中画动态曲线,但是调试时发现程序一直在OnPaint函数和调用的OnPaint_Draw函数中运行,不会到达OnComm函数中,当去掉OnPaint函数时,才可以到达OnComm函数获得串口通信数据,怎样解决这个问题呢?

c#-C#中串口通信发送数据问题

问题描述 C#中串口通信发送数据问题 串口通信数据发送,除了可用字节数组byte[],还可以用其他的什么吗? 解决方案 串口硬件就是一个字节一个字节发的. 你可以通过c#的convert和ASCII转一下格式, 把其它的数据转成字节数组. 解决方案二: C#下调用JustinIO的串口通信问题C#串口通信 解决方案三: 不清楚.我做过几个串口通信的例子,不过使用byte[]都能达到要求,不知道你的需求是什么

C#结合串口通信类实现串口通信源代码

mycom是串口通信类.下面是串口通讯测试程序的源代码,将mycom类放在此项目中,可以实现简单的串口通信,希望读者能通过这个程序对串口通信过程有一个初步的了解: using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Threading; namesp

串口通信-android蓝牙串口接收数据

问题描述 android蓝牙串口接收数据 最近在做android手机蓝牙和单片机通信,一直被接收数据完整性这个问题困扰. 为了使一次通信的包保持完整,我就构思了发送12位的包,包头(1)+数据(8)+校验(2)+包尾(1),校验为求和校验.单片机发送数据的函数如下 void SendString(uchar *dat) //发送12位的包 包头(1)+数据(8)+校验(2)+包尾(1) { uchar i,j; uint check=0; //求和校验 SendChar(0x01); //0x0

单片机-蓝牙串口问题,手机数据不接收

问题描述 蓝牙串口问题,手机数据不接收 我用的是51单片机上的教程 输入 字符X 会显示 I GET X. 然后我用单片机和电脑相连 输入1 串口助手会显示i get 1 . 我再用蓝牙模块直接和电脑相连 手机连接蓝牙,手机输入1串口助手显示1.证明手机发数据蓝牙能接收. 我再将单片机和蓝牙模块相连,手机连上蓝牙,手机输入1,电脑串口助手没反应,求解这是什么问题呀! 谢谢大家!STC89C52 #include #define uchar unsigned char #define uint u

51单片机串口通信时,接收到数据后为什么在while语句中将EA置1

问题描述 51单片机串口通信时,接收到数据后为什么在while语句中将EA置1 刚进入while语句时为什么要将EA置1??程序如下: #include #define uchar unsigned char uchar numaflagbenum; sbit beep=P2^3; void init(); void main() { init(); while(1) { if(flag==1) { EA=0; flag=0; TR0=1; if(a==1) { benum=4; } if(a=

android 串口通信读取数据

问题描述 android 串口通信读取数据 串口读数据时,size= mInputStream.read(buffer),执行到这一步就不往下执行了,求解! 解决方案 android串口通信Android串口通信android串口通信 解决方案二: 亲,您这个问题解决了吗??我现在也是卡在这块了,,您有办法吗??求告诉一下,,万分感谢 解决方案三: 亲,我的是线程阻塞了,