android ble常见问题收集

 
 

http://www.jianshu.com/p/c7639e8b6787

1.oppo ble难扫描的问题

oppo 手机只扫描一次,所以经常扫不到

修改方式:开启线程1秒执行一次

scanLeDevice(false);

scanLeDevice(false);

scanLeDevice(true);

Runnable runnable=newRunnable() {

@Override

public voidrun() {

//TODO Auto-generated method stub

//要做的事情

scanLeDevice(false);

scanLeDevice(true);

scanHandler.postDelayed(this,1000);

}

};

scanHandler.postDelayed(runnable,1000);//每两秒执行一次runnable.

2.ble循环写入失败

ble向设备循环写入不需要设备回复的数据时需要设置以上属性,否则会写入失败:

wirteGattCharacteristic.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE);

3.蓝牙多次连接问题

通过使用if(gatt==null)来判断gatt是否被创建过,如果创建过就使用gatt.connect();重新建立连接。

* 但是在这种情况下测试的结果是重新连接需要花费很长的时间。

* 解决办法是通过gatt = device.connectGatt(this, false, gattCallback);建立一个新的连接对象,很明显这样的速度要比上一种方法快很多

* 然而,多次创建gatt连接对象的直接结果是创建过6个以上gatt后就会再也连接不上任何设备,原因应该是android中对BLE限制了同时连接的数量为6个

* 解决办法是在每一次重新连接时都执行一次gatt.close();关闭上一个连接。

* 有人说为什么不在gatt.disconnect();后加一条gatt.close();呢,原因是如果立即执行gatt.close();会导致gattCallback无法收到STATE_DISCONNECTED的状态。

* 当然,最好的办法是在gattCallback收到STATE_DISCONNECTED后再执行gatt.close();,这样逻辑上会更清析一些。

4.ble三星note3链接不上问题

1.ble三星note3必须在主线程中扫描 才能扫到

2.三星有很多代码是要规范才能正常运行的

5.提高连接成功概率

扫描到设备后,开线程停一会再连接,可以提高连接效率

6.连接间隔时间修改

ble 中requestConnectionPriority这个方法 修改设备连接参数(android5.0以上系统才有的api)

requestConnectionPriority(intconnectionPriority)

connectionPriority这个参数可以设置三个值:

CONNECTION_PRIORITY_BALANCED:0//默认的值,ble建议的设备连接参数

CONNECTION_PRIORITY_HIGH:1//连接快的值,当需要跟设备进行大的数据传输时设置该值,当传输完成后需要设置为CONNECTION_PRIORITY_BALANCED(如固件升级时可设置为该值)

CONNECTION_PRIORITY_LOW_POWER:2.//低功耗值

7.安卓4.3版本难连接解决方案:

经测试发现安卓4.3版本每次扫描后再连接,容易连接,因此在测试界面加入版本的判断,当手机为4.3版本时先扫描再连接。

8.ble与设备进行大量数据交互时(如ota升级)容易断开问题

app与设备进行大数据交互时,容易断:

解决方法:修改设备的蓝牙连接间隔在10-20ms

9.连接间隔修改方法:

1.设备中有做好接收app发送指令后修改的:根据设备商提供的协议往设备上发送连接间隔时间(如ti芯片就有该功能)

2.芯片厂商没有的:在android5.0以上系统有:

ble 中requestConnectionPriority这个方法 修改设备连接参数

requestConnectionPriority(intconnectionPriority)

connectionPriority这个参数可以设置三个值:

CONNECTION_PRIORITY_BALANCED:0//默认的值,ble建议的设备连接参数

CONNECTION_PRIORITY_HIGH:1//连接快的值,当需要跟设备进行大的数据传输时设置该值,当传输完成后需要设置为CONNECTION_PRIORITY_BALANCED(如固件升级时可设置为该值)

CONNECTION_PRIORITY_LOW_POWER:2.//低功耗值

3.有些厂商会在大数据交互开始时主动请求申请修改连接间隔

10.扫描时不能做太多的事情:

在BluetoothAdapter.startLeScan()的时候,在BluetoothAdapter.LeScanCallback.onLeScan()中不能做太多事情,特别是周围的BLE设备多的时候,开发建议:在onLeScan()回调中只做尽量少的工作,可以把扫描到的设备,扔到另外一个线程中去处理,让onLeScan()尽快返回

11.ble蓝牙连接参数解析 device.connectGatt(this, false, mGattCallbacks);

device.connectGatt(this, false, mGattCallbacks);

主要是第二个参数:为false  立刻发起一次连接

为true  自动连接,只要蓝牙设备变得可用

实测发现,用false连接比较好,比较快, true会等个十几秒甚至几分钟才会连接上。  开发过程中一般都是用false,扫描到bluetoothdevice之后,直接用false连接即可。

12.扫描到设备后,开线程停一会再连接,可以提高连接效率

GATT_NO_RESOURCES = -128 or 128;

GATT_INTERNAL_ERROR = -127 or 129; //搜索服务找不到报129

GATT_ERROR = -123 or 133;//连接异常报133

GATT_ALREADY_OPEN = -115 or 141

作者:风过才懂 链接:http://www.jianshu.com/p/c7639e8b6787 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值