为什么Monitor Notifier总是在android-ibeacon-service中返回UUID?

时间:2014-02-09 04:51:47

标签: android ibeacon ibeacon-android

我正在试用一些iBeacons的样本。在RangingActivity中,一切都按预期工作。我可以看到有关iBeacon的所有信息。但是,我正在尝试修改通知程序的didEnterREgion方法,我遇到了问题。即使技术上某些事情在我尝试region.getProximityUuid()时被“找到”,它也会返回null。我无法找到在第一次连接时获取此信息的好方法?我做错了吗?

以下是我修改过的方法的片段:

public void didEnterRegion(Region region) {
      logToDisplay("I just saw an iBeacon for the first time!"); 
    String ttag = "calbeaconM";
    Log.v(ttag,"proxUUID: " + region.getProximityUuid());
    //Log.v(ttag,"distance: " + region.getAccuracy());
    Log.v(ttag,"major: " + region.getMajor());
    Log.v(ttag,"minor: " + region.getMinor());
    //Log.v(ttag,"proximity: " + region.getProximity());
    Log.v(ttag,"hash: " + region.hashCode());
    //Log.v(ttag,"rssi: " + region.getRssi());


    if(region.getProximityUuid() != null){

    }
 }

和logcat输出:

proxUUID: null
major: null
minor: null
hash: -1975428096

无法弄清楚我哪里出错了。

1 个答案:

答案 0 :(得分:1)

您的代码没有显示您如何设置要监控的区域,但我怀疑您设置了一个全空区域,如示例代码所示:

   iBeaconManager.startMonitoringBeaconsInRegion(
       new Region("myMonitoringUniqueId", null, null, null));

如果这是您开始监控的方式,那么您所看到的完全是预期的。您在didEnterRegion方法中作为参数获得的region对象与您传递给startMonitoringBeaconsInRegion方法的区域具有相同的字段值。如果你用最后三个参数构造你的区域为null(proximityUuid,major,minor),那就是你得到的。

为什么这样工作?当你开始监控时,你基本上是在说“告诉我有关这些标识符的iBeacons”。等效的方法调用在iOS上做同样的事情,让你设置null主要和次要值,但Android允许你将proximityUuid设置为null,有效地说,“告诉我任何我看到的任何iBeacon”。

如果您想查看您检测到的iBeacons的标识符,有两种方法可以执行此操作:

  1. 开始监控时指定标识符:

    iBeaconManager.startMonitoringBeaconsInRegion(
        new Region("myMonitoringUniqueId", "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6", 1, 100));
    
  2. 开始监控时也开始测距。 didRangeBeaconsInRegion(Collection<IBeacon> iBeacons, Region region)范围回调会为您提供所有可见的iBeacon列表,并填充所有标识符。

  3. 有关详细信息,请参阅example code