这里是一个展示如何使用它进行传输和接收的库。我使用以下传输方式
Beacon beacon = new Beacon.Builder()
.setId1("2f234454-cf6d-4a0f-adf2-f4911ba9ffa6")
.setId2("1")
.setId3("2")
.setManufacturer(0x0118)
.setTxPower(-59)
.setDataFields(Arrays.asList(new Long[] {0l}))
.build();
BeaconParser beaconParser = new BeaconParser()
.setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25");
BeaconTransmitter beaconTransmitter = new BeaconTransmitter(getApplicationContext(), beaconParser);
beaconTransmitter.startAdvertising(beacon);它成功地为我工作,我也可以从另一个开源应用中看到它。
在接收过程中,我使用BeaconConsumer接口,并成功地调用了onBeaconServiceConnect,正如我在日志中看到的那样,但是,如web示例或下面所示,区域函数有问题。
beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));什么是"myRangingUniqueId“,因为下面三个部分分别是id1,id2,id3,用于传输,那么这个参数是什么?
我的理解是,这个区域函数将过滤掉某些id,它与给定的参数匹配,对于蓝牙Alt信标,UUID由三部分组成-- id1、id2、id3。因此,什么是"myRangingUniqueId“真的让我感到困惑。根据我的实验,这个参数与UUID不一样,因为我将它设置为目标UUID不起作用。
我无法解释什么是"myRangingUniqueId“。
如果我错了,请纠正我。提前谢谢你的帮助。
发布于 2020-05-14 11:50:02
区域的字符串标识符用作用于开始和停止目的的标识区域的键。
例子:
Region region1 = Region("abc123", null, null, null));
beaconManager.startRangingBeaconsInRegion(region1);以上代码开始对所有信标进行测距,而不考虑标识符。
如果然后运行以下代码:
Region region2 = Region("abc123", Identifier.parse("2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6"), null, null));
beaconManager.startRangingBeaconsInRegion(region1);这将使停止对上面显示的第一个区域进行测距,并将其替换为一个只与所示的第一个标识符匹配信标的新区域。第一个参数匹配是触发此行为的原因。
如果希望同时对两个区域进行排列,则可以这样做:
Region region1 = Region("abc123", null, null, null));
beaconManager.startRangingBeaconsInRegion(region1);
Region region2 = Region("def456", Identifier.parse("2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6")
beaconManager.startRangingBeaconsInRegion(region2);因为两个区域都有不同的键,所以可以同时使用它们。
调用stopRangingBeaconsInRegion(region)时使用相同的密钥匹配过程。
API是这样工作的,因为它们在互操作性方面被设计成类似于iOS CoreLocation API。在iOS上,API使用相同的技术。这使得构建跨平台应用程序变得非常容易。
https://stackoverflow.com/questions/61790018
复制相似问题