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

时间:2015-01-20 10:25:20

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

我正在开发一个使用Beacons的应用程序。我已经完成了相关的Estimote SDK。现在问题是我需要知道特定灯塔的唯一ID。假设我有3个信标,并且所有信标都存在于设备的范围内。现在我想根据信标的唯一ID执行不同的功能。为此,我需要知道每个灯塔的唯一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做出决定。 请帮我整理一下。任何帮助都会很明显。 感谢。

2 个答案:

答案 0 :(得分: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);

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

现在让我们假设你正在为这座城市的电影院写一个应用程序。每个电影院都有两个不同的信标来执行不同的动作。 如何区分电影院的信标以及如何在特定的电影中为特定的灯塔做到这一点?
使用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){
          ...
        }
 }

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

答案 1 :(得分:0)

当我试用它时遇到这篇文章,它可能对你有所帮助。 https://community.estimote.com/hc/en-us/articles/200868188-How-do-I-modify-UUID-major-and-minor-values-