Alt 信标 Android 不稳定
Alt Beacon Android unstable
我正在构建一个基于 Alt Beacon 的 android 应用程序。首先,我的测试设备是 Digiland (P-O-S) 平板电脑 运行 android 4.4。
我正在使用 Radius Networks USB 信标及其在此处找到的 Alt Beacon 库:https://github.com/AltBeacon/android-beacon-library
在我自己的应用程序和随库提供的参考应用程序中,我发现信标的检测时间非常不稳定/极慢。例如,您可以在下面看到参考应用程序的日志。平板电脑始终距离信标不超过 1/2 米。
有没有人见过这种行为?难道我做错了什么?信标上的广播速率似乎设置为 10Hz,功率似乎设置为最大。我应该换个设备试试吗?我看到其他一些帖子建议关闭我所做的 wifi,并且此日志来自关闭 wifi 的试用版。
我应该注意的一件事是我在应用程序子类中使用以下代码块增加了扫描频率:
beaconManager.setBackgroundBetweenScanPeriod(9000l);
beaconManager.setBackgroundScanPeriod(1000l);
beaconManager.setForegroundBetweenScanPeriod(9000l);
beaconManager.setForegroundScanPeriod(1000l);
try{
beaconManager.updateScanPeriods();
}catch (RemoteException e){
e.printStackTrace();
}
我不确定这样做是否不当,但是当我删除它时,我仍然看到下面日志中描述的相同行为,只是时间稍长一些。
任何人的建议都将不胜感激,因为我觉得我正在为此而旋转!
07-01 15:23:59.005 10771-10771/org.altbeacon.beaconreference D/ReferenceApplication﹕ setting up background monitoring for beacons and power saving
07-01 15:23:59.655 10771-10816/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:23:59.655 10771-10816/org.altbeacon.beaconreference D/ReferenceApplication﹕ auto launching MainActivity
07-01 15:24:20.154 10771-11297/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:24:39.174 10771-11486/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:25:00.132 10771-11647/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:25:09.472 10771-11730/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:25:30.123 10771-11871/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:25:39.173 10771-11954/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:26:00.065 10771-12070/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:26:29.099 10771-12083/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:26:29.100 10771-12083/org.altbeacon.beaconreference D/ReferenceApplication﹕ Sending notification.
07-01 15:26:40.112 10771-12096/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:27:19.120 10771-12127/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:27:19.120 10771-12127/org.altbeacon.beaconreference D/ReferenceApplication﹕ Sending notification.
07-01 15:27:40.041 10771-12208/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:27:59.110 10771-12786/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:28:30.144 10771-13052/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:28:39.202 10771-13131/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:28:50.133 10771-13226/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:29:09.125 10771-13375/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:29:30.119 10771-13452/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:29:49.144 10771-13473/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:30:00.060 10771-13510/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:30:19.134 10771-13552/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:30:19.135 10771-13552/org.altbeacon.beaconreference D/ReferenceApplication﹕ Sending notification.
07-01 15:30:30.096 10771-13560/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:31:09.124 10771-13575/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:31:09.125 10771-13575/org.altbeacon.beaconreference D/ReferenceApplication﹕ Sending notification.
07-01 15:31:20.110 10771-13576/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:31:29.101 10771-13578/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:31:29.101 10771-13578/org.altbeacon.beaconreference D/ReferenceApplication﹕ Sending notification.
07-01 15:32:40.101 10771-13647/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:32:59.131 10771-13651/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
还有一件值得注意的事情是,当我在日志中对 onScanResult 进行筛选时,我看到了:
07-01 15:45:49.074 10771-10839/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=24:4B:03:2E:00:D9 RSSI=-91
07-01 15:45:49.117 1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=00:07:80:1E:7E:B7, rssi=-56
07-01 15:45:49.120 10771-10784/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=00:07:80:1E:7E:B7 RSSI=-56
07-01 15:45:49.365 1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=62:44:C6:64:4D:A5, rssi=-76
07-01 15:45:49.368 10771-10783/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=62:44:C6:64:4D:A5 RSSI=-76
07-01 15:45:59.082 1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=62:44:C6:64:4D:A5, rssi=-77
07-01 15:45:59.084 10771-10784/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=62:44:C6:64:4D:A5 RSSI=-77
07-01 15:45:59.130 1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=00:07:80:1E:7E:B7, rssi=-59
07-01 15:45:59.133 10771-10783/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=00:07:80:1E:7E:B7 RSSI=-59
07-01 15:45:59.140 1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=24:4B:03:2E:00:D9, rssi=-76
07-01 15:45:59.141 10771-10839/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=24:4B:03:2E:00:D9 RSSI=-76
07-01 15:46:09.115 1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=00:07:80:1E:7E:B7, rssi=-58
07-01 15:46:09.117 10771-10783/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=00:07:80:1E:7E:B7 RSSI=-58
07-01 15:46:09.124 1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=24:4B:03:2E:00:D9, rssi=-86
07-01 15:46:09.126 10771-10839/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=24:4B:03:2E:00:D9 RSSI=-86
07-01 15:46:09.135 1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=62:44:C6:64:4D:A5, rssi=-76
07-01 15:46:09.139 10771-10784/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=62:44:C6:64:4D:A5 RSSI=-76
07-01 15:46:19.060 1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=24:4B:03:2E:00:D9, rssi=-91
07-01 15:46:19.062 10771-10839/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=24:4B:03:2E:00:D9 RSSI=-91
07-01 15:46:19.092 1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=00:07:80:1E:7E:B7, rssi=-64
00:07:80 设备是我的灯塔,但我完全不知道 24:4B:03 设备是什么时候。有谁知道我如何获得有关此设备的更多数据?它有可能干扰我的实际信号吗?我试过同时使用
Region region = new Region("backgroundRegion",
Identifier.parse("2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6"), null, null);
和
Region region = new Region("backgroundRegion",null, null, null);
不幸的是,我在两种变体中都遇到了这种 运行dom 波动。
更新:
我也 运行 激活了 beaconManager.setDebug(true) 标志。这是 resulting log
更新 2:
我将信标切换为仅针对 iBeacon 广播,问题似乎消失了大约 10 分钟。不幸的是,问题很快又回来了。通过日志查看,我现在看到的完全不同。可以看到日志here。我的假设是问题出在这一行:
07-01 21:46:31.035 2499-2499/com.avtar.truckkeeper D/CycledLeScanner﹕ cancel wakeup alarm: PendingIntent{41f32070: android.os.BinderProxy@41d8f750}
任何 thoughts/help 将不胜感激!
根据对答案底部链接的 "resulting log" 的分析,我怀疑有几件事正在发生:
- 传输信标配置为同时传输 AltBeacon 和 iBeacon 数据包。
- Android Beacon 库尚未配置为检测 iBeacon 数据包,仅检测默认的 AltBeacon 数据包。
- 发射信标处于可连接模式。
- 当信标处于可连接模式时,Digiland (P-O-S) 平板电脑在每个扫描周期只能检测到来自每个不同蓝牙 LE 设备的一个数据包。 (其他几个 Android 型号也有这种行为,包括 Nexus 4 和 Moto G)
- 扫描间隔已配置为超长--每10秒扫描一秒。
所有这些事情共同创造了一场完美风暴,导致了这些问题:
由于 (4) 中描述的缺陷以及信标处于 (3) 中描述的可连接模式这一事实,这意味着每个扫描周期只会拾取一个数据包。因为信标正在发送如 (1) 中所述的交错广告,这意味着此数据包有 50-50 的机会是 iBeacon 数据包。如果是iBeacon数据包,因为库没有按照(2)中的描述配置检测iBeacons,所以在那个周期内不会有检测。并且由于扫描周期如5中所述为10秒,这将导致断断续续的区域退出和重新进入。 (如果 10 秒内没有看到信标,库将触发区域退出。)
更改其中任何一项都可能使问题消失:
重新配置您的信标以关闭 iBeacon 传输(或配置库以检测 iBeacon 传输。)
缩短信标的连接超时时间——例如60 秒后。一旦无法连接,平板电脑将能够在每个扫描周期中获取多个数据包,问题就会消失。
减少扫描周期的时间长度。如果您将默认的 1100 毫秒扫描时间保留为前台扫描时间间隔为 0 毫秒,那么在 10 秒区域超时触发之前,库将有 9 个周期来检测信标。在 9 个周期内未检测到信标的 50-50 几率将变为 0.5^9 = 0.1% 机会。
我正在构建一个基于 Alt Beacon 的 android 应用程序。首先,我的测试设备是 Digiland (P-O-S) 平板电脑 运行 android 4.4。
我正在使用 Radius Networks USB 信标及其在此处找到的 Alt Beacon 库:https://github.com/AltBeacon/android-beacon-library
在我自己的应用程序和随库提供的参考应用程序中,我发现信标的检测时间非常不稳定/极慢。例如,您可以在下面看到参考应用程序的日志。平板电脑始终距离信标不超过 1/2 米。
有没有人见过这种行为?难道我做错了什么?信标上的广播速率似乎设置为 10Hz,功率似乎设置为最大。我应该换个设备试试吗?我看到其他一些帖子建议关闭我所做的 wifi,并且此日志来自关闭 wifi 的试用版。
我应该注意的一件事是我在应用程序子类中使用以下代码块增加了扫描频率:
beaconManager.setBackgroundBetweenScanPeriod(9000l);
beaconManager.setBackgroundScanPeriod(1000l);
beaconManager.setForegroundBetweenScanPeriod(9000l);
beaconManager.setForegroundScanPeriod(1000l);
try{
beaconManager.updateScanPeriods();
}catch (RemoteException e){
e.printStackTrace();
}
我不确定这样做是否不当,但是当我删除它时,我仍然看到下面日志中描述的相同行为,只是时间稍长一些。
任何人的建议都将不胜感激,因为我觉得我正在为此而旋转!
07-01 15:23:59.005 10771-10771/org.altbeacon.beaconreference D/ReferenceApplication﹕ setting up background monitoring for beacons and power saving
07-01 15:23:59.655 10771-10816/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:23:59.655 10771-10816/org.altbeacon.beaconreference D/ReferenceApplication﹕ auto launching MainActivity
07-01 15:24:20.154 10771-11297/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:24:39.174 10771-11486/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:25:00.132 10771-11647/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:25:09.472 10771-11730/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:25:30.123 10771-11871/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:25:39.173 10771-11954/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:26:00.065 10771-12070/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:26:29.099 10771-12083/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:26:29.100 10771-12083/org.altbeacon.beaconreference D/ReferenceApplication﹕ Sending notification.
07-01 15:26:40.112 10771-12096/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:27:19.120 10771-12127/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:27:19.120 10771-12127/org.altbeacon.beaconreference D/ReferenceApplication﹕ Sending notification.
07-01 15:27:40.041 10771-12208/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:27:59.110 10771-12786/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:28:30.144 10771-13052/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:28:39.202 10771-13131/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:28:50.133 10771-13226/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:29:09.125 10771-13375/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:29:30.119 10771-13452/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:29:49.144 10771-13473/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:30:00.060 10771-13510/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:30:19.134 10771-13552/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:30:19.135 10771-13552/org.altbeacon.beaconreference D/ReferenceApplication﹕ Sending notification.
07-01 15:30:30.096 10771-13560/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:31:09.124 10771-13575/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:31:09.125 10771-13575/org.altbeacon.beaconreference D/ReferenceApplication﹕ Sending notification.
07-01 15:31:20.110 10771-13576/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:31:29.101 10771-13578/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
07-01 15:31:29.101 10771-13578/org.altbeacon.beaconreference D/ReferenceApplication﹕ Sending notification.
07-01 15:32:40.101 10771-13647/org.altbeacon.beaconreference D/ReferenceApplication﹕ did exit region
07-01 15:32:59.131 10771-13651/org.altbeacon.beaconreference D/ReferenceApplication﹕ did enter region.
还有一件值得注意的事情是,当我在日志中对 onScanResult 进行筛选时,我看到了:
07-01 15:45:49.074 10771-10839/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=24:4B:03:2E:00:D9 RSSI=-91
07-01 15:45:49.117 1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=00:07:80:1E:7E:B7, rssi=-56
07-01 15:45:49.120 10771-10784/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=00:07:80:1E:7E:B7 RSSI=-56
07-01 15:45:49.365 1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=62:44:C6:64:4D:A5, rssi=-76
07-01 15:45:49.368 10771-10783/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=62:44:C6:64:4D:A5 RSSI=-76
07-01 15:45:59.082 1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=62:44:C6:64:4D:A5, rssi=-77
07-01 15:45:59.084 10771-10784/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=62:44:C6:64:4D:A5 RSSI=-77
07-01 15:45:59.130 1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=00:07:80:1E:7E:B7, rssi=-59
07-01 15:45:59.133 10771-10783/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=00:07:80:1E:7E:B7 RSSI=-59
07-01 15:45:59.140 1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=24:4B:03:2E:00:D9, rssi=-76
07-01 15:45:59.141 10771-10839/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=24:4B:03:2E:00:D9 RSSI=-76
07-01 15:46:09.115 1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=00:07:80:1E:7E:B7, rssi=-58
07-01 15:46:09.117 10771-10783/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=00:07:80:1E:7E:B7 RSSI=-58
07-01 15:46:09.124 1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=24:4B:03:2E:00:D9, rssi=-86
07-01 15:46:09.126 10771-10839/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=24:4B:03:2E:00:D9 RSSI=-86
07-01 15:46:09.135 1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=62:44:C6:64:4D:A5, rssi=-76
07-01 15:46:09.139 10771-10784/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=62:44:C6:64:4D:A5 RSSI=-76
07-01 15:46:19.060 1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=24:4B:03:2E:00:D9, rssi=-91
07-01 15:46:19.062 10771-10839/org.altbeacon.beaconreference D/BluetoothAdapter﹕ onScanResult() - Device=24:4B:03:2E:00:D9 RSSI=-91
07-01 15:46:19.092 1425-1495/? D/BtGatt.GattService﹕ onScanResult() - address=00:07:80:1E:7E:B7, rssi=-64
00:07:80 设备是我的灯塔,但我完全不知道 24:4B:03 设备是什么时候。有谁知道我如何获得有关此设备的更多数据?它有可能干扰我的实际信号吗?我试过同时使用
Region region = new Region("backgroundRegion",
Identifier.parse("2F234454-CF6D-4A0F-ADF2-F4911BA9FFA6"), null, null);
和
Region region = new Region("backgroundRegion",null, null, null);
不幸的是,我在两种变体中都遇到了这种 运行dom 波动。
更新:
我也 运行 激活了 beaconManager.setDebug(true) 标志。这是 resulting log
更新 2:
我将信标切换为仅针对 iBeacon 广播,问题似乎消失了大约 10 分钟。不幸的是,问题很快又回来了。通过日志查看,我现在看到的完全不同。可以看到日志here。我的假设是问题出在这一行:
07-01 21:46:31.035 2499-2499/com.avtar.truckkeeper D/CycledLeScanner﹕ cancel wakeup alarm: PendingIntent{41f32070: android.os.BinderProxy@41d8f750}
任何 thoughts/help 将不胜感激!
根据对答案底部链接的 "resulting log" 的分析,我怀疑有几件事正在发生:
- 传输信标配置为同时传输 AltBeacon 和 iBeacon 数据包。
- Android Beacon 库尚未配置为检测 iBeacon 数据包,仅检测默认的 AltBeacon 数据包。
- 发射信标处于可连接模式。
- 当信标处于可连接模式时,Digiland (P-O-S) 平板电脑在每个扫描周期只能检测到来自每个不同蓝牙 LE 设备的一个数据包。 (其他几个 Android 型号也有这种行为,包括 Nexus 4 和 Moto G)
- 扫描间隔已配置为超长--每10秒扫描一秒。
所有这些事情共同创造了一场完美风暴,导致了这些问题:
由于 (4) 中描述的缺陷以及信标处于 (3) 中描述的可连接模式这一事实,这意味着每个扫描周期只会拾取一个数据包。因为信标正在发送如 (1) 中所述的交错广告,这意味着此数据包有 50-50 的机会是 iBeacon 数据包。如果是iBeacon数据包,因为库没有按照(2)中的描述配置检测iBeacons,所以在那个周期内不会有检测。并且由于扫描周期如5中所述为10秒,这将导致断断续续的区域退出和重新进入。 (如果 10 秒内没有看到信标,库将触发区域退出。)
更改其中任何一项都可能使问题消失:
重新配置您的信标以关闭 iBeacon 传输(或配置库以检测 iBeacon 传输。)
缩短信标的连接超时时间——例如60 秒后。一旦无法连接,平板电脑将能够在每个扫描周期中获取多个数据包,问题就会消失。
减少扫描周期的时间长度。如果您将默认的 1100 毫秒扫描时间保留为前台扫描时间间隔为 0 毫秒,那么在 10 秒区域超时触发之前,库将有 9 个周期来检测信标。在 9 个周期内未检测到信标的 50-50 几率将变为 0.5^9 = 0.1% 机会。