我正在试用一些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
无法弄清楚我哪里出错了。
答案 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的标识符,有两种方法可以执行此操作:
开始监控时指定标识符:
iBeaconManager.startMonitoringBeaconsInRegion(
new Region("myMonitoringUniqueId", "2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6", 1, 100));
开始监控时也开始测距。 didRangeBeaconsInRegion(Collection<IBeacon> iBeacons, Region region)
范围回调会为您提供所有可见的iBeacon列表,并填充所有标识符。
有关详细信息,请参阅example code。