1.连接过程中出现BlueToothGatt failed to register callback

BLE的连接过程是搜索→连接→发现服务。在连接的过程中会碰到BlueToothGatt Failed to register callback的问题。目前该问题的解决方式如下:

private void BleConnect(BluetoothDevice device) {mBleDevice = device;mBleMediator.stopScan(mBleScanCallback);mHandler.postDelayed(new Runnable() {@Overridepublic void run() {mBleMediator.connectBle(BleActivity.this, true, mBleDevice);}}, 50);}
即在BLE搜索到设备之后暂停一段,然后再进行连接,目前该问题只在三星手机Android 4.3的固件中出现。

2.接收多条数据出现数据丢失

通过回调函数onCharacteristicChanged()或者onCharacteristicWrite()接收数据时,如果同时接收多条数据,并且设备端发送的数据间隔过短,接收函数有可能出现数据的丢失。个人感觉是回调函数的线程同步问题,解决方式如下。

/** * 触发远程characteristics通知结果时回调 *  * @param bleGatt 与characteristics相关联的GATT客户端连接 * @param bleChrc 通知更新结果的characteristics */public void onCharacteristicChanged(BluetoothGatt bleGatt, BluetoothGattCharacteristic bleChrc) {byte[] mByte = bleChrc.getValue();StringBuilder mStrBuilder = new StringBuilder(mByte.length);/** 逐byte转换 */for (byte mByteChar : mByte) {mStrBuilder.append(String.format("%02x", mByteChar));} /** end of for (byte mByteChar : mByte) */try {Thread.sleep(50);} catch (InterruptedException e) {e.printStackTrace();}}

在接收数据之后线程Sleep()一段时间,可以提高数据接收的可靠性。

关于BLE数据传输的可靠性。蓝牙传输本身的可靠性较高,在4.0规范中其链路层核心协议L2CAP使用了CRC校验,用以保证数据传输的可靠性,如果CRC校验出错,则直接丢弃数据。但是在规范中并没有强制规定丢包时的重传,如果将BLE使用在对传输可靠性要求较高的场合,还需在应用层自己封装一层传输协议

更多相关文章

  1. Android(安卓)连接Wifi和创建Wifi热点的实例
  2. ViewPage固定每页加载的数量。进行翻页
  3. Android(安卓)- Intent
  4. Android实现多参数文件和数据上传
  5. StageFright框架流程解读
  6. 如何获取手机短信和通话记录信息
  7. Android(安卓)获取手机中微信聊天记录并后台发送到邮箱
  8. Android中的Sqlite数据库操作总结
  9. android调用系统短信Intent时将预填接收号码和内容

随机推荐

  1. Android系统移植与调试之------->如何修
  2. android中的键盘处理
  3. Google I/O 2014 New
  4. Android(安卓)应用程序之间数据共享—Con
  5. Android性能测试之卡顿ANR测试
  6. Android的Intent机制
  7. Android中单击空白区域隐藏键盘
  8. ffmpeg neon优化必看!!android下编译ffmpeg
  9. 工(程师)欲善其事,必先利其(编译)器——《Andr
  10. Android(安卓)解决程序启动时的黑屏问题