bt-hci btu_ble_process_adv_pkt仍然在iBeaconManager.unBind(this)之后运行;被称为onDestroy()

时间:2014-02-18 15:04:56

标签: android ibeacon

我正在使用适用于Android的Radius Networks iBeacon库来构建我的第一个Android应用。实现图书馆真的很容易,我有一个不错的演示应用程序工作(非常感谢davidgyoung!)。

我现在正试图解决问题。我的应用程序用作演示,用户需要通过靠近3个iBeacons来勾选3个复选框。然后会向他们显示一个活动,询问他们是否想要再次使用按钮重新启动它。

显示'已完成'的功能。活动也完成()的复选框' (range)activity,onDestroy调用iBeaconManager的unBind方法。

间歇性地,重启后iBeacons没有被拿起,LogCat将永远吐出来。

02-18 14:52:38.800: I/bt-hci(1392): BLE HCI(id=62) event = 0x02)
02-18 14:52:38.800: I/bt-hci(1392): btu_ble_process_adv_pkt
02-18 14:52:38.850: I/bt-hci(1392): BLE HCI(id=62) event = 0x02)
02-18 14:52:38.850: I/bt-hci(1392): btu_ble_process_adv_pkt
02-18 14:52:38.910: W/bt-btif(1392):  bta_dm_ble_observe BTM_BleObserve  failed. status 2
02-18 14:52:38.980: I/bt-hci(1392): BLE HCI(id=62) event = 0x02)

它通常发生在应用的第二次/第三次运行中。 我的预感是因为

失败了
iBeaconManager.unBind(this);

没有正确释放BT堆栈,最终导致两个实例重叠。

任何人都可以对此有所了解,因为我已经达到了一个我无处可去的地步。

如果您想查看更多代码,请与我们联系。

最佳

安德鲁

2 个答案:

答案 0 :(得分:0)

我怀疑这个问题与绑定到服务的/ unbinding有关。执行您所描述的内容如果代码在以后重新绑定之前总是解除绑定,那么这应该没问题。如果没有看到代码(或者是重现问题的简化版本),很难肯定会出现什么问题。)

我建议您在绑定时添加日志语句,在解除绑定时添加另一个日志语句,然后运行应用程序并确保它们匹配。 Android生命周期可能很棘手。我打赌你会发现存在不匹配。你确定在Destroy()上总是被调用吗?

了解如果在没有绑定其他客户端时调用iBeaconManager.unbind(),则IBeaconService将停止,LogCat应该确认这一点。如果你以后重新绑定,它将再次开始备份。你看到了吗?

另一个提示:如果您使用Android iBeacon库在手机上运行了两个应用程序,则将运行两个服务副本。这是设计的,应该没有问题,但可能会使LogCat输出混乱。使用设置停止或卸载除这些应用程序之外的所有应用程序以帮助调试。

答案 1 :(得分:0)

我也遇到了这个问题,并将其追溯到IBeaconLibrary内部的一个错误。我准备向RadiusNetworks报告这个问题,但是在他们的GitHub上注意到这已经找到了(或者是相关原因的类似错误)并且已经修复了他们当前的代码。不幸的是,它尚未正式发布,因此您需要从GitHub下载源代码并自行构建库,但我可以确认在完成此操作后,我不再看到此问题。