我目前正在开发将使用低功耗蓝牙的应用程序(在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操作系统的更新,也许其中的某些提示不再是必需的。)
android.bluetooth.BluetoothGatt#close()
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)android.bluetooth.BluetoothAdapter#startLeScan(UUID[] serviceUuids, LeScanCallback callback)
与该参数一起使用以过滤某些服务UUID,因为它在带有Android 4.3的Samsung Galaxy S3中已完全损坏,并且通常不适用于128位UUID。对于新手来说,一个不错的入门点是以下视频教程:为Android开发蓝牙智能应用程序http://youtu.be/x1y4tEHDwk0
解决方法:这样做可以“稳定”我的应用程序...
解决方法是基于以下经验...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句