sa.*_*dow 186 android bluetooth bluetooth-lowenergy android-bluetooth android-4.3-jelly-bean
我目前正在开发一种将使用蓝牙低功耗的应用程序(在Nexus 4上进行测试).在开始使用Android 4.3中的官方BLE API之后,我注意到在我第一次连接设备后,我很少能够成功连接到该设备或与该设备或任何其他设备进行通信.
按照此处的指南,我可以成功连接到设备,扫描服务和特性,以及读取/写入/接收通知而不会出现任何问题.但是,在断开连接并重新连接后,我经常无法扫描服务/特性或无法完成读/写操作.我在日志中找不到任何内容来说明为什么会发生这种情况.
一旦发生这种情况,我必须卸载应用程序,禁用蓝牙,然后重新启动手机才能再次开始工作.
每当设备断开连接时,我都要确保在BluetoothGatt对象上调用close()并将其设置为null.任何见解?
编辑:
日志转储:对于这些日志,我根据我的手机并在/etc/bluetooth/bt_stack.conf中提升了相关项目的跟踪级别
连接成功 - 重新启动手机并安装应用后首次尝试.我能够连接,发现所有服务/特性,以及读/写.
失败尝试1 - 这是断开上述成功连接后的下一次尝试.似乎我能够发现特征,但是第一次尝试读取时返回了一个空值并且很快就断开了.
失败的尝试2 - 我甚至无法发现服务/特征的示例.
编辑2:
我尝试连接的设备基于TI的CC2541芯片.我获得了TI SensorTag(也基于CC2541),并发现TI 昨天为SensorTag 发布了一个Android应用程序.但是,这个应用程序有同样的问题.我在另外两个Nexus 4上进行了测试,结果相同:第一次或第二次连接SensorTag成功,但是(根据日志)之后无法发现服务,导致各种崩溃.我开始怀疑这个特定芯片是否存在问题?
One*_*rld 179
(由于Android操作系统更新,可能不再需要其中一些提示.)
android.bluetooth.BluetoothGatt#close() onLeScan(..),然后连接.原因:BluetoothDevice#connectGatt(Context context, boolean autoConnect, BluetoothGattCallback callback)总是失败,如果LeScanCallback() {...}.onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord)在Android 4.3的三星Galaxy S3上的同一个线程中调用(至少对于构建JSS15J.I9300XXUGMK6)android.bluetooth.BluetoothAdapter#startLeScan(UUID[] serviceUuids, LeScanCallback callback) 参数来过滤某些服务UUID,因为这在使用Android 4.3的Samsung Galaxy S3中完全被破坏,并且通常不适用于128位UUID.这个视频教程可以为新手提供一个非常好的切入点:为Android开发蓝牙智能应用程序http://youtu.be/x1y4tEHDwk0
解决方法:我可以"稳定"我的应用程序......
这项工作基于以下经验......
ben*_*nka 16
我也可以确认,关闭WIFI会使蓝牙4.0更稳定,特别是在谷歌Nexus上(我有一台Nexus 7).
是应用程序,我发展的需求既WIFI和连续蓝牙LE扫描.所以关闭WIFI对我来说是没有选择的.
此外我已经意识到,连续蓝牙LE扫描实际上可以杀死WIFI连接并使WIFI适配器无法重新连接到任何WIFI网络,直到BLE扫描开启.(我不确定移动网络和移动互联网).
这肯定发生在以下设备上:
然而,使用WIFI进行BLE扫描似乎非常稳定:
我扫描BLE一小段时间3-4秒然后我关闭扫描3-4秒.然后再次开启.
services或characteristics失败时也会重置BLE .确保您的Nexus与设备配对.我无法验证通信是否正常工作,但您可以在不重启的情况下连接多次.似乎第一次连接不需要配对,但所有后续尝试都需要配对.
我将在几天内更新此答案,当我测试服务发现和gatt读取和写入请求而不重新启动时.
编辑:事实证明我正在测试开发固件版本(我们的传感器),如果没有配对就会导致问题.我们最新的生产固件版本在2540s和2541s上运行良好.
编辑:我注意到在Nexus 7 2013上,当WiFi关闭时,连接更加稳定.我想知道这是否有助于其他任何人.
编辑:我似乎已经配对了倒退.没有配对时一切正常.配对后,我遇到与OP完全相同的症状.目前还不知道这是否与我们的固件或Android BLE API有关.要小心,如果在这个3b的测试,是因为一旦配对,您可能无法取消配对由于错误解释后.
在某些模型中存在缺陷:https : //code.google.com/p/android/issues/detail?id=180440
另一方面,在我的情况下,问题是在onDestroy方法中未正确关闭我的连接。正确关闭后,对我来说不存在问题,无论是否打开或关闭wifi。
btGatt.disconnect();
btGatt.close();
Run Code Online (Sandbox Code Playgroud)
小智 5
我面临着类似的问题。我的解决方法是
if (Build.VERSION.SDK_INT >= 23) {
mBluetoothGatt = device.connectGatt(this, false, mGattCallback, BluetoothDevice.TRANSPORT_LE);
} else {
mBluetoothGatt = device.connectGatt(this, false, mGattCallback);
}
Run Code Online (Sandbox Code Playgroud)
& 断开连接后调用关闭。
| 归档时间: |
|
| 查看次数: |
96072 次 |
| 最近记录: |