0

我正在尝试使用一些 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

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

4

1 回答 1

1

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

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

如果这是您开始监控的方式,那么您所看到的完全是意料之中的。您在方法中作为参数获得的区域对象didEnterRegion与您传递给方法的区域具有相同的字段值startMonitoringBeaconsInRegion。如果您在最后三个参数为空(proximityUuid、major、minor)的情况下构建了您的区域,这就是您得到的结果。

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

如果您想查看您检测到的 iBeacons 的标识符,有两种方法:

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

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

有关更多详细信息,请参阅示例代码

于 2014-02-09T14:05:54.363 回答