当前位置:   article > 正文

Android BLE踩坑日记_bluetoothgatt.class.getmethod

bluetoothgatt.class.getmethod

Android在4.3中引入了对BLE的支持,BLE基本使用方法请参考Android BLE开发入门

以下是我在BLE开发中遇到的坑:

  • 数据长度
    BLE的特征一次读写最大长度20字节

  • 异步问题
    读写Characteristic、Descriptor等几乎所有BLE操作结果都为异步返回,若不等待上一次操作结果返回就执行下一次操作,很可能导致操作失败或者操作无效。onDescriptorWrite()返回的线程与写入线程为同一个线程,别的操作一般在不同的线程回调。

  • 设备缓存
    Android会对连接过的BLE设备的Services进行缓存,若设备升级后Services等有改动,则程序会出现通讯失败。此时就得刷新缓存,但是刷新缓存的方法并没有开放,这里只能使用反射来调用BluetoothGatt类中的refresh()方法:

  1. try {
  2. Method localMethod = mBluetoothGatt.getClass().getMethod("refresh");
  3. if (localMethod != null) {
  4. return (Boolean) localMethod.invoke(mBluetoothGatt);
  5. }
  6. } catch (Exception localException) {
  7. Log.e("refreshServices()", "An exception occured while refreshing device");
  8. }
  • 扫描设备
    startLeScan(UUID[], BluetoothAdapter.LeScanCallback)在Android4.4及以下手机中似乎只支持16位的短UUID,不支持128位完整的UUID。

  • 蓝牙回调
    安卓4.4的蓝牙回调是在异步线程中(不在主线程),若要在蓝牙回调中执行更新界面的操作,记得切换到主线程去操作

  • 三星手机兼容性问题
    connectGatt()方法在某些三星手机上只能在UI线程调用。

  • Android L 新API
    Android L换了一套扫描设备的API:BluetoothLeScanner.startScan(List, ScanSettings, ScanCallback)

  • Android M新的权限
    Android M中必须拥有定位权限才能扫描BLE设备

  • 连接不断开的问题
    别的BLE程序非法保留连接的设备可能会导致连接不能断开



作者:fengmlo
链接:https://www.jianshu.com/p/d0eedd17f2df
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/956076
推荐阅读
相关标签
  

闽ICP备14008679号