我正在尝试扫描信标,然后一旦找到信标,便开始从手机上发布GATT服务器。问题是扫描似乎没有正确停止,然后中断了我与连接到GATT服务器的设备的连接。
我尝试做的第一件事是使用
停止并解除我的BeaconScannerService的绑定。beaconManager.unbind(this)
onUnbind()和OnStopService()内部。
在此操作无效后,我尝试在找到我的信标后立即解除扫描仪的绑定:
override fun didRangeBeaconsInRegion(beacons: Collection<Beacon>, region: Region) {
if (beacons.isNotEmpty()) {
for (beacon in beacons) {
if (!listOfBeacons.contains(beacon)) {
listOfBeacons.add(beacon)
sendNotificationFound()
localIntent.putExtra("BT_Address", beacon.bluetoothAddress)
localIntent.putExtra("Is_Connected", true)
LocalBroadcastManager.getInstance(this).sendBroadcast(localIntent)
Log.e("BEACON", "FOUND ONE " + beacon.bluetoothAddress)
}
}
Log.e(TAG, "Stopping Service")
beaconManager.stopRangingBeaconsInRegion(region)
beaconManager.removeAllRangeNotifiers()
beaconManager.stopMonitoringBeaconsInRegion(region)
beaconManager.removeAllMonitorNotifiers()
beaconManager.unbind(this)
beaconManager.isBound(this)
stopSelf()
}
}
我还启用了BeaconManager的调试选项,但是发生了太多事情,我不知道会有什么帮助。
最后,我希望能够在发现信标之后完全摆脱所有信标扫描。
答案 0 :(得分:0)
有几点要澄清这里发生的事情:
我怀疑在某些情况下,某些库竞争情况可能会使此基于意图的扫描保持打开状态。可能会解决以下问题:不调用unbind()
,而是像您一样停止量程和监视。
如果这不起作用,那么如果您附上从尝试停止服务到发现“通过意图获取Android O后台扫描”之类的日志摘录,我可能可以帮助您进行跟踪问题。 (也请让我知道您使用的库版本号。)
最后,我要补充的是,如果将扫描真正保留为“然后中断与连接到GATT服务器的设备的连接”,我会感到惊讶。您可能会发现这不是该问题的根本原因。