Android 蓝牙信标唯一标识符
Android Bluetooth beacon unique identifier
Here 是展示如何使用它进行传输和接收的库。我用下面的传输
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 被成功调用,正如我在日志中看到的那样,但是我的 Region 函数有问题,如网络示例或下面所示
beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));
什么是"myRangingUniqueId"因为后面的三部分分别是id1,id2,id3用来传输,那么这个参数是什么?
我的理解是这个Region函数会过滤掉特定的id,匹配给定的参数,对于蓝牙altbeacon,UUID是由id1,id2,id3三部分组成。因此什么是 "myRangingUniqueId" 真的让我很困惑。根据我的实验,这个参数和UUID不一样,因为我把它设置为目标UUID不起作用。
我无法解释 "myRangingUniqueId" 是什么。
如有错误请指正。
在此先感谢您的帮助。
区域的字符串标识符用作标识区域以用于启动和停止目的的键。
示例:
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 使用相同的技术。这使得构建跨平台应用程序变得容易。
Here 是展示如何使用它进行传输和接收的库。我用下面的传输
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 被成功调用,正如我在日志中看到的那样,但是我的 Region 函数有问题,如网络示例或下面所示
beaconManager.startRangingBeaconsInRegion(new Region("myRangingUniqueId", null, null, null));
什么是"myRangingUniqueId"因为后面的三部分分别是id1,id2,id3用来传输,那么这个参数是什么?
我的理解是这个Region函数会过滤掉特定的id,匹配给定的参数,对于蓝牙altbeacon,UUID是由id1,id2,id3三部分组成。因此什么是 "myRangingUniqueId" 真的让我很困惑。根据我的实验,这个参数和UUID不一样,因为我把它设置为目标UUID不起作用。
我无法解释 "myRangingUniqueId" 是什么。
如有错误请指正。 在此先感谢您的帮助。
区域的字符串标识符用作标识区域以用于启动和停止目的的键。
示例:
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 使用相同的技术。这使得构建跨平台应用程序变得容易。