Android蓝牙信标唯一标识符

问题描述 投票:0回答:1

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));

由于接下来的三部分分别是用于传输的id1,id2,id3,所以什么是“ myRangingUniqueId”,所以该参数是什么?

[我的理解是,该Region函数将过滤出与给定参数匹配的某些id,对于蓝牙altbeacon,UUID由id1,id2,id3三部分组成。因此,“ myRangingUniqueId”真的使我感到困惑。根据我的实验,此参数与UUID不同,因为我将其设置为目标UUID无效。

我无法解释什么是“ myRangingUniqueId”。

如果我错了,请纠正我。预先感谢您的帮助。

android android-studio bluetooth bluetooth-lowenergy altbeacon
1个回答
0
投票

Region的字符串标识符用作识别用于启动和停止目的的区域的键。

示例:

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使用相同的技术。这使构建跨平台应用程序变得容易。

© www.soinside.com 2019 - 2024. All rights reserved.