我遇到了Android 6.0和一些蓝牙低功耗设备的严重问题。其中一个抵触的装置是这样的一种:Android 6.0棉花糖BLE连接问题
DEVICE INFO:
Name: Samsung Galaxy SV
Model number: SM-G900V
Android vers: 6.0.1
Patch level: May 1, 2016
Hard. vers: G900V.05
如果我让一些压力测试基于连接和断开该应用一个BLE外围成功率勉强达到50%。
读了Android的最新文档,他们建议以指定connectGatt方法的最后一个参数的传输模式来执行BLE交通连接,而非BR/EDR:
device.connectGatt(this, false, mGattCallback, BluetoothDevice.TRANSPORT_LE);
自认倒霉改善改变。
继一些suggestions并阅读了关于BLE连接问题后,我发现了三星Galaxy S6的几个相关问题,并在one of those中提出了一系列解决BLE连接问题的步骤。关键之一是对clear Bluetooth Share system app数据。这样做,连接率立即增加了几乎100%的成功。但是,如果您等待和其他一些BLE应用程序一起玩并连接到其他外设,问题迟早会回来。
有在试图解决这些BLE问题,他们基本上做的是谷歌播放some apps:
/system/bin/rm -r /data/misc/bluetoothd/*
/system/bin/rm -r /data/misc/hcid/*
虽然这是一个方法来清除蓝牙高速缓存,它需要植根是设备不是专业应用程序的合理解决方案。
我研究的私人Android API并没有帮助我解决这个问题,而我发现的唯一类似的是enforce service discovery cache cleanup,这与问题无关。
使用BLE分组嗅探我看到ADV_CONNECT_REQ
甚至没有从设备发送到外围设备,并在一段时间后在Android堆触发BluetoothGattCallback
的STATE_DISCONNECTED
事件。
我不完全知道为什么这个问题出现在一些6.0设备中,而不是其他的,因为蓝牙共享缓存似乎是问题所在。那里存储的是什么?刚刚连接/配对的设备?我是唯一遇到这个问题的人吗?如果不是,你们如何解决它?我不想指导最终用户如何清除蓝牙共享应用程序数据。
测试这对S6边缘,我可以证实,清除蓝牙共享缓存和数据帮助其连接,而无需通过BluetoothDevice.TRANSPORT_LE参数。我失去了为什么会发生这种情况。清除缓存之前,它根本没有连接。 –
这很好,你知道我不是唯一一个。感谢@CanCanbek的反馈,希望有人能帮助我们。 – GoRoS
我看了上面的内容,我明白了你的意思,在6.0系统上的S6 edge,在执行connectGatt()函数后,执行到cache操作,可以保证正常的手机和通信设备不会有耽搁。这是什么意思?@ Can Canbek – amibition