为什么在 altBeacon 库中使用区域时无法获得完整的 uuid?
Why I can't get complete uuid when using region in altBeacon library?
我正在使用我的应用程序来扫描 Ibeacon 格式的设备。
起初我使用 startMonitoringBeaconsInRegion。正如我发现的那样,我无法访问 ibeacons 的 uuid。在不删除 startMonitoringBeaconsInRegion 的情况下,我添加了 startRangingBeaconsInRegion。所以我的问题解决了。然后我需要我的应用程序只使用指定的 uuid 过滤我的信标。
我遇到了新问题。例如,我在一个地方有很多,例如 3 或 4 个 Ibeacon。像这样,
00000000-0000-0000-0000-000000000001
00000000-0000-0000-0000-000000000002
00000000-0000-0000-0000-000000000003
00000000-0000-0000-0000-000000000004
我写了 beaconParser.setBeaconLayout :
beaconManager!!.beaconParsers.add(BeaconParser().setBeaconLayout("m:2-3=0215,i:4-7,i:4-19,i:20-21,i:22-23,p:24-24"))
和这个地区:
val region = Region("myBeaons", Identifier.parse("0x00000000"), null, null)
我需要 myapp 过滤掉所有匹配第 4 个字节 0x00000000 的信标。它正在工作,但在下面,当我想获得每个信标的完整 uuid 时,它 returns 只是我在 region 中写入的第 4 个字节。我需要每个信标的完整 UUID 才能发送到我的服务器。
beaconManager!!.removeAllRangeNotifiers()
beaconManager!!.addRangeNotifier(object : RangeNotifier {
override fun didRangeBeaconsInRegion(p0: MutableCollection<Beacon>?, p1: Region?) {
beaconManager!!.stopRangingBeaconsInRegion(region)
if (p0!!.size > 0) {
Log.d(
"Ranging",
"didRangeBeaconsInRegion called with beacon count: " + p0.size
)
for (beacon in p0) {
Log.d("Ranging", "uuid: " + beacon.id1)
}
progress.visibility = View.GONE
homeRelative2.visibility = View.VISIBLE
} else if (p0.size == 0) {
progress.visibility = View.GONE
homeRelative2.visibility = View.VISIBLE
}
}
})
}
beacon.id1 returns 只是 0x00000000。我做错了什么?
此外,我搜索了很多有关在区域变量中设置范围(正则表达式)的内容。但没有发现。
主要目标我希望应用程序过滤掉我范围内指定的 uuid ibeacon 设备,然后将它们发送到服务器。
流行的 Android 库(受 iOS 核心位置标准启发)定义的信标区域不是这样工作的——没有部分标识符匹配。整个标识符必须匹配。
最简单的解决方案是为每个要匹配的 UUID 创建一个区域,并像这样对每个 UUID 进行监控:
val region1 = Region("region1", Identifier.parse("00000000-0000-0000-0000-000000000001"), null, null)
val region2 = Region("region2", Identifier.parse("00000000-0000-0000-0000-000000000002"), null, null)
val region3 = Region("region3", Identifier.parse("00000000-0000-0000-0000-000000000003"), null, null)
val region4 = Region("region4", Identifier.parse("00000000-0000-0000-0000-000000000004"), null, null)
beaconManager.startRangingBeaconsInRegion(region1);
beaconManager.startRangingBeaconsInRegion(region2);
beaconManager.startRangingBeaconsInRegion(region3);
beaconManager.startRangingBeaconsInRegion(region4);
第二个但更复杂的选项是重新定义您的信标布局表达式以将 id1 分解为至少两个标识符,因此您最终得到 id1、id2、id3 和 id4。这样你就可以在全零前缀上进行匹配。然而,这种方法有点 non-standard,并且难以设置。如果您继续需要来自这样的论坛的帮助,可能会造成麻烦,因为几乎没有其他人以这种方式编程。这种替代方法也有缺点,它会阻止您将解决方案移植到 iOS,后者不支持这种部分标识符前缀。
我正在使用我的应用程序来扫描 Ibeacon 格式的设备。 起初我使用 startMonitoringBeaconsInRegion。正如我发现的那样,我无法访问 ibeacons 的 uuid。在不删除 startMonitoringBeaconsInRegion 的情况下,我添加了 startRangingBeaconsInRegion。所以我的问题解决了。然后我需要我的应用程序只使用指定的 uuid 过滤我的信标。
我遇到了新问题。例如,我在一个地方有很多,例如 3 或 4 个 Ibeacon。像这样,
00000000-0000-0000-0000-000000000001
00000000-0000-0000-0000-000000000002
00000000-0000-0000-0000-000000000003
00000000-0000-0000-0000-000000000004
我写了 beaconParser.setBeaconLayout :
beaconManager!!.beaconParsers.add(BeaconParser().setBeaconLayout("m:2-3=0215,i:4-7,i:4-19,i:20-21,i:22-23,p:24-24"))
和这个地区:
val region = Region("myBeaons", Identifier.parse("0x00000000"), null, null)
我需要 myapp 过滤掉所有匹配第 4 个字节 0x00000000 的信标。它正在工作,但在下面,当我想获得每个信标的完整 uuid 时,它 returns 只是我在 region 中写入的第 4 个字节。我需要每个信标的完整 UUID 才能发送到我的服务器。
beaconManager!!.removeAllRangeNotifiers()
beaconManager!!.addRangeNotifier(object : RangeNotifier {
override fun didRangeBeaconsInRegion(p0: MutableCollection<Beacon>?, p1: Region?) {
beaconManager!!.stopRangingBeaconsInRegion(region)
if (p0!!.size > 0) {
Log.d(
"Ranging",
"didRangeBeaconsInRegion called with beacon count: " + p0.size
)
for (beacon in p0) {
Log.d("Ranging", "uuid: " + beacon.id1)
}
progress.visibility = View.GONE
homeRelative2.visibility = View.VISIBLE
} else if (p0.size == 0) {
progress.visibility = View.GONE
homeRelative2.visibility = View.VISIBLE
}
}
})
}
beacon.id1 returns 只是 0x00000000。我做错了什么?
此外,我搜索了很多有关在区域变量中设置范围(正则表达式)的内容。但没有发现。
主要目标我希望应用程序过滤掉我范围内指定的 uuid ibeacon 设备,然后将它们发送到服务器。
流行的 Android 库(受 iOS 核心位置标准启发)定义的信标区域不是这样工作的——没有部分标识符匹配。整个标识符必须匹配。
最简单的解决方案是为每个要匹配的 UUID 创建一个区域,并像这样对每个 UUID 进行监控:
val region1 = Region("region1", Identifier.parse("00000000-0000-0000-0000-000000000001"), null, null)
val region2 = Region("region2", Identifier.parse("00000000-0000-0000-0000-000000000002"), null, null)
val region3 = Region("region3", Identifier.parse("00000000-0000-0000-0000-000000000003"), null, null)
val region4 = Region("region4", Identifier.parse("00000000-0000-0000-0000-000000000004"), null, null)
beaconManager.startRangingBeaconsInRegion(region1);
beaconManager.startRangingBeaconsInRegion(region2);
beaconManager.startRangingBeaconsInRegion(region3);
beaconManager.startRangingBeaconsInRegion(region4);
第二个但更复杂的选项是重新定义您的信标布局表达式以将 id1 分解为至少两个标识符,因此您最终得到 id1、id2、id3 和 id4。这样你就可以在全零前缀上进行匹配。然而,这种方法有点 non-standard,并且难以设置。如果您继续需要来自这样的论坛的帮助,可能会造成麻烦,因为几乎没有其他人以这种方式编程。这种替代方法也有缺点,它会阻止您将解决方案移植到 iOS,后者不支持这种部分标识符前缀。