【问题标题】:How to get Unique Id of a Beacon using Estimote SDK in Android如何在 Android 中使用 Estimote SDK 获取信标的唯一 ID
【发布时间】:2015-03-18 12:58:03
【问题描述】:

我正在开发一个使用信标的应用程序。我已经通过相关的 Estimote SDK 进行了同样的操作。现在问题是我需要知道特定信标的唯一 ID。假设我有 3 个信标,并且所有信标都存在于设备范围内。现在我想根据信标的唯一 ID 执行不同的功能。为此,我需要知道每个 Beacon 的唯一 ID。 目前,我正在为 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 ...
            }
        });

现在我需要以编程方式获取 Beacon 的唯一 ID,以便我可以根据 ID 做出决定。 请帮我解决同样的问题。任何帮助都是不言而喻的。 谢谢。

【问题讨论】:

  • 我也遇到了同样的问题。你找到解决办法了吗?

标签: android ibeacon ibeacon-android estimote android-ibeacon


【解决方案1】:

我在尝试时偶然发现了这篇文章,它可能对您有所帮助。 https://community.estimote.com/hc/en-us/articles/200868188-How-do-I-modify-UUID-major-and-minor-values-

【讨论】:

  • 嘿 Swarna,感谢您的回答,但我正在为 Android 搜索它。有什么办法可以在 Android 中解决这个问题?
  • 您可能应该直接询问 estimote,大多数功能尚不适用于 android。
【解决方案2】:

每个信标都有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);

现在,在您的听众中,当您的信标在附近时,您会收到通知。

现在让我们假设您正在为城市的电影院编写应用程序。每个电影院都有两个不同的信标来执行不同的操作。 如何区分电影院的信标以及如何区分特定电影院中的特定信标?
使用 majorminor 字段。例如:

  • 使用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,感谢您的回答。我不清楚主要和次要的事情,这里的“SCARY_CINEMA_ID”和“SCARY_CINEMA_BEACON_1”是什么。你能解释一下吗?
  • @SalmanKhan majorminor 是 esitmote 信标的标准字段。我们可以使用它们作为标识来识别信标。 SCARY_CINEMA_ID 是任意选择的 minor 用于电影院,例如 1111。COMEDY_CINEMA_ID 是第二个 minor,用于其他电影院,例如 2222。如果您有两个信标,并且您想将其与 SCARY_CINEMA 和 proximityUUID="beaconsForCinemas" 相关联,您有将第一个信标的值设置为:uuuid="beaconsForCinemas",major = 1111,minor=1,对于这个电影院中的第二个信标,使用相同但设置 minor = 2
  • 所以在创建区域时,我需要设置 UUID、Major 和 Minor 值来检测 Beacon,对吧?
  • @SalmanKhan 这取决于您想要到达的信标上下文的范围。如果您希望每个电影院的整个城市的所有信标只使用proxmityUUID,如果您只想要一个电影院的信标添加特定的major,如果您想在特定电影院中精确地使用一个信标,您必须添加所有树字段所以还要添加minor.
  • 太棒了。谢谢老哥的解释。接受:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多