我遇到了一个问题,可以在使用不同Android操作系统的不同设备上重现它。 我第一次使用iBeacon扫描得到了预期的行为。当我下次扫描时,我没有得到信标。委托中的结果列表为空。我在setRangeNotifier上打印了一个带有信标大小的计数,但显然它只是在第一次显示信标大小为1之后才连续显示为0.
beaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(final Collection<Beacon> beacons, Region region) {
Log.d("Beacons count",beacons.size());
}
});
输出: 信标数1 信标数为0 信标数为0 信标数为0
我的测距期和扫描期如下
beaconManager.setBackgroundScanPeriod(1000l);
beaconManager.setBackgroundBetweenScanPeriod(31000l);
答案 0 :(得分:1)
这不是预期的行为,我在其他设备上的Android 4.4上也没有看到过这种情况。根据有限的信息,它可能是一个应用程序问题,或者它可能是一个问题的4.4 CynogenMod ROM为One Plus。有关参考设备(Nexus 5)的详细测试用例,请参阅我的其他答案。
要消除应用程序问题的可能性,请尝试使用基于相同库的Locate应用程序,看看您是否获得相同的结果。
答案 1 :(得分:1)
我试图重现您描述的症状,但在使用Android 5和传输RadBeacon USB的Nexus 5上无法重现这些症状。
参考申请修改:
将这些行添加到BeaconReferenceApplication onCreate()方法:
beaconManager.setBackgroundBetweenScanPeriod(1000l);
beaconManager.setBackgroundBetweenScanPeriod(31000l);
beaconManager.setAndroidLScanningDisabled(true);
BeaconManager.setDebug(true);
上面的第三行是必需的,因为我正在使用Android 5测试Nexus 5,我想练习4.x扫描API, 就像你将在4.4手机上完成一样。
将此行添加到RangingActivity didRangeBeaconsInRegion回调中:
Log.d(TAG, "ranged beacon: "+firstBeacon.toString());
测试步骤:
启用RadBeacon USB以10 HZ传输。
使用以下命令记录结果:
$ /Users/dyoung/sdk-android-studio/platform-tools/adb logcat -v time | grep "anged beacon"
运行参考应用程序,在前台开始测距,三秒钟后将其放入后台。请参阅以下日志记录结果:
03-01 08:39:00.146 D/RangingActivity(11146): ranged beacon: id1: 04ff791e-f83b-434b-8031-1b3e72bdbcb7 id2: 1 id3: 1
03-01 08:39:01.282 D/RangingActivity(11146): ranged beacon: id1: 04ff791e-f83b-434b-8031-1b3e72bdbcb7 id2: 1 id3: 1
03-01 08:39:02.482 D/RangingActivity(11146): ranged beacon: id1: 04ff791e-f83b-434b-8031-1b3e72bdbcb7 id2: 1 id3: 1
03-01 08:39:03.515 D/RangingActivity(11146): ranged beacon: id1: 04ff791e-f83b-434b-8031-1b3e72bdbcb7 id2: 1 id3: 1
03-01 08:39:12.148 D/RangingActivity(11146): ranged beacon: id1: 04ff791e-f83b-434b-8031-1b3e72bdbcb7 id2: 1 id3: 1
03-01 08:39:44.274 D/RangingActivity(11146): ranged beacon: id1: 04ff791e-f83b-434b-8031-1b3e72bdbcb7 id2: 1 id3: 1
03-01 08:40:16.179 D/RangingActivity(11146): ranged beacon: id1: 04ff791e-f83b-434b-8031-1b3e72bdbcb7 id2: 1 id3: 1
03-01 08:40:48.239 D/RangingActivity(11146): ranged beacon: id1: 04ff791e-f83b-434b-8031-1b3e72bdbcb7 id2: 1 id3: 1
03-01 08:41:20.272 D/RangingActivity(11146): ranged beacon: id1: 04ff791e-f83b-434b-8031-1b3e72bdbcb7 id2: 1 id3: 1
03-01 08:41:52.205 D/RangingActivity(11146): ranged beacon: id1: 04ff791e-f83b-434b-8031-1b3e72bdbcb7 id2: 1 id3: 1
03-01 08:42:24.202 D/RangingActivity(11146): ranged beacon: id1: 04ff791e-f83b-434b-8031-1b3e72bdbcb7 id2: 1 id3: 1
正如您所看到的,回调在前景中每1.1秒发出一次,在后台每32秒发出一次。这是预期的。
如果您不能使用带有Cyanogenmod 4.4的OnePlus设备上的参考应用程序重复上述步骤,则问题可能出在该设备的ROM上。如果你能证实这一点 并且在回调未到来的时间段内捕获完整的Logcat输出(如上所述打开调试),然后请在http://github.com/AltBeacon/android-beacon-library/issues打开一个问题并附上日志捕获的副本。
答案 2 :(得分:0)
经过进一步的反思,我认为扫描间隔是问题所在。报告的扫描间隔是每隔32秒花费1秒钟寻找信标。这还不足以实现占空比,特别是对于仅以1Hz传输的信标。并非所有传输都是由于无线电噪声而接收的,因此扫描持续时间为1100 ms或更长时间非常重要,以防止传输跨越扫描仪启动或关闭的边界。