相关疑难解决方法(0)

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 bluetooth bluetooth-lowenergy android-bluetooth android-4.3-jelly-bean

186
推荐指数
5
解决办法
10万
查看次数

本机Android BLE实现本质上是同步的吗?

我记得在三星BLE API(存档页面)"指南和提示" -doc中阅读:

三星F/W和堆栈最重要的概念之一是它的同步特性.也就是说,如果我们调用例如 writeCharacteristic某个特定的特性,如果它返回 true,则在收到回调后应该对any BluetoothGattBluetoothGattServer方法进行下一次调用onCharacteristicRead.这是因为堆栈被设计为一次仅支持和处理一个GATT调用,例如,如果您在第一个调用之后很快调用 writeCharacteristicreadCharacteristic处理任何特性,则忽略它.

  1. 这也适用于Android 4.3中引入的BLE的nativ实现吗?
  2. Samsung API一次只支持一个连接的GATT设备.这在原生API中有变化吗?

android bluetooth-lowenergy gatt android-4.3-jelly-bean

15
推荐指数
1
解决办法
1万
查看次数

Android BLE BluetoothGatt.writeDescriptor()有时会返回false

我正在尝试编写BLE Android应用程序.我发现有时当我调用 BluetoothGatt.writeDescriptor()时它会返回false.

我没有在文档中找到任何关于此功能的限制说明.但是堆栈溢出的ppl说我需要等待BluetoothGattCallback.onDescriptorWrite()才能尝试编写另一个描述符.

这是一个回复说BLE忙于 writeDescriptor()而不能做其他写操作.

这是另一个线程说你不能再调用writeCharacteristic()两次.

我的问题是

  • 这是真的吗?
  • 是否真的缺少一些用于序列化BLE请求的内部android API缓冲区,每个开发人员都必须自己动手做?
  • 对于不同的功能是否属实?例如,当我打电话时,writeDescriptor()我知道writeDescriptor()在收到之前我不能第二次打电话onDescriptorWrite().但是,onDescriptorWrite()当我想打电话时,我必须等待writeCharacteristic()吗?
  • 此外,如果有功能间依赖性然后还有什么功能都有此限制(即:readCharacteristic(),readDescriptor(),requestMtu()...)?
  • 此外,BluetoothGattServer和BluetoothGatt之间存在相互依赖关系.所以,例如,当我打电话给BluetoothGattServer.notifyCharacteristicChanged()我时,我等待BluetoothGattServerCallback.onNotificationSent才能打电话BluetoothGatt.writeDescriptor()BluetoothGatt.writeCharacteristic()?(BTW对谷歌文档的称赞onNotificationSent()是通过运气记录得当.Doc说:

当要发送多个通知时,应用程序必须等待收到此回调才能发送其他通知.

  • 最后提出所有这些问题 - 我觉得Android BLE API文档不足.或者我错了,并且在某处记录了允许调用序列的方法?如果是,请指点我这样的文件?如果不是有一些渠道,我们可以打开谷歌的问题,并要求他们添加到文档的东西?我的意思是它可能不是很多文本 - 某些功能就像onNotificationSent()arleady正确记录的那样.他们只需要将这句话复制到其他功能.

android bluetooth-lowenergy

5
推荐指数
1
解决办法
2352
查看次数