我正在构建一个使用Android信标库扫描两种类型信标的android应用程序:
我知道有一个问题是修复了三星的屏幕故障扫描https://github.com/AltBeacon/android-beacon-library/pull/798。
这个修复被实现到2.15.3发行版中。
从那时起,每次使用三星设备>= Android8.0进行扫描时,我都没有看到任何自定义信标,但我确实收到了其他信标类型,比如iBeacon。所以我仍然在使用2.15.2版本。
这是我的自定义信标布局:
"m:0-1=4106,i:2-3,i:4-4,i:5-6,i:7-8,i:9-10,i:11-11,i:12-12,i:13-13,i:14-14,i:15-15,i:16-16,i:17-17,i:18-23,p:24-24" 我检查了库中的代码,我可以看到一个只适用于三星设备的过滤器:
if (Build.MANUFACTURER.equalsIgnoreCase("samsung")) {
// On the Samsung Galaxy Note 8.1, scans are blocked with screen off when the
// scan filter is empty (wildcard). We do a more detailed filter on Samsung only
// because it might block detections of AltBeacon packets with non-standard
// manufacturer codes. See #769 for details.
filters = new ScanFilterUtils().createScanFiltersForBeaconParsers(
mBeaconManager.getBeaconParsers());
}如果我删除了这段代码,一切都会像我预期的那样正常工作。
有什么事情我必须做,这样我就不需要编辑库?
谢谢。
发布于 2019-03-07 15:56:28
当应用程序在后台时,库使用BLE制造商ID和信标类型代码来匹配BLE过滤器。若要使此操作正常,必须将这些设置完全正确,否则过滤器将不匹配。
这里有两个问题:
beaconParser.setHardwareAssistManufacturerCodes(new int[]{0x1234});重要提示:移动设备有数量有限的蓝牙硬件过滤槽。您可以通过以下方式帮助确保您不会耗尽它们:
beaconManager.getBeaconParsers().clear();来删除它。上述API是在三星的限制实施之前设计的,这使得这成为一个更严重的问题。对于如何使这个API更直观,我对其他想法持开放态度,这样其他人就不会遇到与您相同的问题。
https://stackoverflow.com/questions/55046987
复制相似问题