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

标签 android ibeacon ibeacon-android estimote android-ibeacon

我正在开发一个使用信标的应用程序。我已经完成了相关的 Estimote SDK。现在问题是我需要知道特定 Beacon 的唯一 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 做出决定。 请帮我整理一下。任何帮助将不胜感激。 谢谢。

最佳答案

每个信标都有ID
ID长20个字节,分为三部分:

  • proximityUUID(16 字节)

  • 主要数(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){
          ...
        }
 }

希望,这会对你有所帮助:)

关于android - 如何在 Android 中使用 Estimote SDK 获取 Beacon 的唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28042956/

相关文章:

android - 当应用程序处于后台状态时,Google FCM getIntent 不返回预期数据

Android - Google Sheets API v4 出现错误 403

ios - iBeacon 和通知

android - 广播信标时出现 ADVERTISE_FAILED_INTERNAL_ERROR

android - 为什么 altbeacon 库只检测少量信标

android - 通知栏同时显示大图标和小图标

java - android/java拆分问题

ios - 在 iOS 上检测非 iBeacon 信标?

ios - 信标和用户位置权限

android - 估计信标 - 无法绑定(bind)服务