如何在Android中使用Estimote SDK获取Beacon的唯一ID

7
我正在开发一个应用程序,其中使用了Beacons。我已经研究了相关的Estimote SDK。现在的问题是,我需要知道特定Beacon的唯一标识符。假设我有3个Beacon,所有的Beacon都在设备的范围内。现在我想根据每个Beacon的唯一标识符执行不同的功能。为此,我需要知道每个Beacon的唯一标识符。 目前,我为一个Beacon提供UUID,并检查它是否在设备的区域内。我的代码如下:
private static final String ESTIMOTE_PROXIMITY_UUID = "XYZ";
private static final Region ALL_ESTIMOTE_BEACONS = new Region("regionId",ESTIMOTE_PROXIMITY_UUID, null, null);

beaconManager.setMonitoringListener(new MonitoringListener() {

            @Override
            public void onExitedRegion(Region region) {
            //Region Exited
            }

            @Override
            public void onEnteredRegion(Region arg0, List<Beacon> arg1) {
                // TODO Auto-generated method stub
                //Do something ...
            }
        });

现在,我需要以编程方式获取信标的唯一标识符,以便根据这些标识符做出决策。请帮助我解决这个问题。任何帮助都将不胜感激。谢谢。

我一直面临着同样的问题。你找到解决方案了吗? - Roadblock
2个回答

7
每个信标都有一个ID。
ID长度为20字节,分为三个部分:
  • proximityUUID(16字节)

  • major号码(2字节)

  • minor号码(2字节)。

如何使用它们来识别特定的信标?

首先,您必须意识到周围可能有很多信标。这些信标可能来自其他供应商、公司或开发人员,因此您需要过滤它们。
要过滤信标,您应该使用proximityUUID将由您或您的公司提供的信标分组。给所有信标相同的proximityUUID
之后,您可以通过以下方式开始监视和测距:
private final Region MY_BEACONS = new Region("MY_BEACONS","YOUR_PROXIMITY_UUID", null, null);

beaconManager.startMonitoring(MY_BEACONS);
beaconManager.startRanging(MY_BEACONS);

现在,您的监听器将在附近时通知您的信标。

现在假设您正在编写一个城市电影院的应用程序。每个电影院都有两个不同的信标以执行不同的操作。 如何区分电影院信标之间的差别,并针对特定电影院中的特定信标进行区分?
使用“major”和“minor”字段。例如:

  • 使用“major”来识别特定电影院中的所有信标,
  • 使用“minor”来识别特定电影院中的特定信标。

当您以这种方式创建信标的ID时,您可以获得特定信标并执行操作:

 private final int SCARY_CINEMA_ID = 1111;
 private final int SCARY_CINEMA_BEACON_1 = 1;
 private final int SCARY_CINEMA_BEACON_2 = 2;
 private final int COMEDY_CINEMA_ID = 2222;
 private final int COMEDY_CINEMA_BEACON_1 = 1;
 private final int COMEDY_CINEMA_BEACON_2 = 2;


 @Override
 public void onEnteredRegion(Region region, List<Beacon> beacons) {
    for(Beacon beacon : beacons){
        if(beacon.getMajor() == SCARY_CINEMA_ID){
           if(beacon.getMinor == SCARY_CINEMA_BEACON_1){
               //do something for this beacon
           } else{
               //do something for second beacon in cinema
           }
        } else if(beacon.getMajor == COMEDY_CINEMA_ID){
          ...
        }
 }

希望这能帮到你:)

嗨mklimek,感谢您的回答。我不太清楚Major和Minor是什么意思,还有这里的“SCARY_CINEMA_ID”和“SCARY_CINEMA_BEACON_1”是什么。您能否再解释一下。 - Salman Khan
1
@SalmanKhan majorminor是esitmote信标的标准字段。我们可以使用它们作为ID来识别信标。SCARY_CINEMA_ID是电影院的任意选择的minor,例如1111。COMEDY_CINEMA_ID是其他电影院的第二个minor,例如2222。如果您有两个信标,并且想将其与SCARY_CINEMA和proximityUUID="beaconsForCinemas"相关联,则必须将第一个信标的值设置为:uuuid="beaconsForCinemas",major=1111,minor=1,对于此电影院中的第二个信标,请使用相同的设置,但将minor设置为2。 - klimat
在创建区域时,我需要设置UUID、Major和Minor值来检测信标,对吗? - Salman Khan
1
@SalmanKhan 这取决于您想要覆盖的信标范围有多广。如果您想在整个城市的每个电影院中使用 proxmityUUID 来获取所有信标,则只需使用该字段即可。如果您只需要一个电影院的信标,请添加特定的 major 字段。如果您需要在特定电影院中精确地获取一个信标,则必须添加所有三个字段,因此还需要添加 minor 字段。 - klimat
1
太好了。感谢你的解释,伙计。已接受 :) - Salman Khan
让我们在聊天中继续这个讨论 - Salman Khan

0

嗨,Swarna,感谢你的回答,但我正在寻找Android的解决方案。有没有办法在Android中解决这个问题? - Salman Khan
你最好直接向Estimote咨询,因为大多数功能尚未在Android上可用。 - Mal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接