Android 4.3蓝牙低功耗不稳定

影子

我目前正在开发将使用低功耗蓝牙的应用程序(在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,但此后(根据日志)未能发现服务,从而导致各种崩溃。我开始怀疑这块特定的芯片是否有问题?

一个世界

重要的实施提示

(由于Android操作系统的更新,也许其中的某些提示不再是必需的。)

  1. 某些设备(如带有Android 4.3的Nexus 4)需要使用现有gatt实例进行连接的时间超过45秒解决方法:始终在断开连接时关闭gatt实例,并在每次连接时创建一个新的gatt实例。
  2. 别忘了打电话 android.bluetooth.BluetoothGatt#close()
  3. 在其中启动一个新线程 onLeScan(..),然后连接。原因:BluetoothDevice#connectGatt(Context context, boolean autoConnect, BluetoothGattCallback callback)如果LeScanCallback() {...}.onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord)在带有Android 4.3的Samsung Galaxy S3的同一线程中内部调用,则始终会失败(至少对于构建JSS15J.I9300XXUGMK6)
  4. 大多数设备过滤广告
  5. 最好不要 android.bluetooth.BluetoothAdapter#startLeScan(UUID[] serviceUuids, LeScanCallback callback) 与该参数一起使用以过滤某些服务UUID,因为它在带有Android 4.3的Samsung Galaxy S3中已完全损坏,并且通常不适用于128位UUID
  6. 加特总是一次能处理一个命令如果几个命令接一个被短暂调用,则由于gatt实现的同步性,第一个命令被取消
  7. 我什至经常在配备Android 5的现代设备上看到Wifi干扰蓝牙,反之亦然。不得已时,请关闭wifi来稳定蓝牙。

初学者教程

对于新手来说,一个不错的入门点是以下视频教程:为Android开发蓝牙智能应用程序http://youtu.be/x1y4tEHDwk0

操作系统更新现已解决了下面描述的问题和解决方法

解决方法:这样做可以“稳定”我的应用程序...

  1. 我为用户提供了“重启蓝牙”设置。如果启用了该设置,我会在某些时候重启蓝牙,这表明BLE堆栈的开始变得不稳定。例如,如果startScan返回false。如果serviceDiscovery失败,这也可能是个好主意。我只是关闭蓝牙然后再打开。
  2. 我提供了另一个设置“关闭WiFi”。如果启用了该设置,则我的应用在运行时会关闭Wifi(然后将其重新打开)

解决方法是基于以下经验...

  • 在大多数情况下,重启蓝牙有助于解决BLE问题
  • 如果关闭Wifi,则BLE堆栈会变得更加稳定。但是,它在打开wifi的大多数设备上也可以正常工作。
  • 如果您关闭Wifi,在大多数情况下,重新启动蓝牙将完全恢复BLE堆栈,而无需重新启动设备。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android低功耗蓝牙-使用ScanFilters

来自分类Dev

Android应用中的蓝牙低功耗

来自分类Dev

Android和蓝牙低功耗(BLE)

来自分类Dev

android蓝牙低功耗状态= 59

来自分类Dev

蓝牙低功耗广告包格式android

来自分类Dev

WiFi读数在android中不稳定

来自分类Dev

蓝牙低功耗RSSI在Android设备上定期更改

来自分类Dev

Android-低功耗蓝牙远程键盘和鼠标

来自分类Dev

低功耗蓝牙Android-在后台搜索

来自分类Dev

Android低功耗蓝牙有时会锁定

来自分类Dev

在Android上为低功耗蓝牙创建后台服务

来自分类Dev

Android蓝牙低功耗:character.getPermissions()返回0?

来自分类Dev

Android 4.3未显示低功耗蓝牙广告

来自分类Dev

配对至Android中的低功耗蓝牙设备

来自分类Dev

Android:蓝牙低功耗GATT配置文件

来自分类Dev

Android 4.3:如何连接到多个低功耗蓝牙设备

来自分类Dev

检查Android中是否存在蓝牙低功耗信标

来自分类Dev

蓝牙低功耗配对方法如何选择Android

来自分类Dev

Android 4.3:如何连接到多个低功耗蓝牙设备

来自分类Dev

带有scanfilter的Android蓝牙低功耗扫描问题

来自分类Dev

从Android中的蓝牙低功耗设备接收数据非常慢

来自分类Dev

Android低功耗蓝牙:无法在某些设备上听到广告

来自分类Dev

FFmpeg v4l2复制不稳定

来自分类Dev

ListView在Android上滚动不稳定且缓慢

来自分类Dev

Android上的不稳定相机行为

来自分类Dev

使用 D3.js v4 对力有向图进行不稳定缩放

来自分类常见问题

需要在Android 6.0上启用蓝牙低功耗扫描的位置

来自分类Dev

Android上的蓝牙低功耗专用地址和公用地址

来自分类Dev

带有添加的API的android 4.1.2能否与蓝牙低功耗通信?

Related 相关文章

热门标签

归档