【发布时间】:2017-06-02 18:46:43
【问题描述】:
我正在使用 Android N 设备(第 5 代 Moto G)测试一个应用程序,但它没有找到任何信标(beacons.size() == 0 始终),但使用具有较低 API 的其他设备可以正常工作.. . 仅在此设备上失败。
我检查了扫描限制比 Google 在 Android N 中添加的限制:
我们从 DP4 开始更改了 BLE 扫描行为。我们会阻止 应用程序在 30 次中启动和停止扫描超过 5 次 秒。对于长时间运行的扫描,我们会将它们转换为机会性扫描 扫描。
这是代码:
public void startBeaconScan() {
Log.d(TAG, "App started up");
beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout(iBeaconLayout));
long timeBetweenScans = 1100;
long timeScanPeriod = 500;
if(Build.VERSION.SDK_INT > 23){ //CHECK IF NOUGAT OR MORE
timeBetweenScans = 5000;
timeScanPeriod = 15000;
}
beaconManager.setForegroundBetweenScanPeriod(timeBetweenScans);
beaconManager.setForegroundScanPeriod(timeScanPeriod);
beaconManager.setBackgroundBetweenScanPeriod(timeBetweenScans);
beaconManager.setBackgroundScanPeriod(timeScanPeriod);
beaconManager.setRegionStatePeristenceEnabled(true);
region = new Region("myMonitoringUniqueId", Identifier.parse("2f234454-cf6d-4a0f-adf2-f4911ba9ffa6"), null, null);
new RegionBootstrap(this, region);
}
此函数是从 BootstrapNotifier 接口的应用程序的 didDetermineStateForRegion() 回调方法调用的。
知道我为什么会遇到这个问题吗?在 Android N 上,我只用 Moto G 5th 进行了测试……但在其他设备(Android L、Android M……)上,代码运行良好。
----- 更新 -----
应用程序启动的Logcat:
06-01 15:51:05.183 12251-12251/? D/MyApplication: App started up
06-01 15:51:05.187 12251-12251/? D/BeaconParser: Parsing beacon layout: m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25
06-01 15:51:05.189 12251-12251/? D/BeaconParser: Parsing beacon layout: m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25
06-01 15:51:05.200 21464-4646/? I/PBSessionCacheImpl: Deleted sessionId[4000692901285] from persistence.
06-01 15:51:05.202 21464-4534/? V/ConnectivityManager: isActiveNetworkMetered() returns:false
06-01 15:51:05.207 21464-4534/? V/ConnectivityManager: isActiveNetworkMetered() returns:false
06-01 15:51:05.211 21464-21464/? W/SearchService: Abort, client detached.
06-01 15:51:05.216 21464-5529/? E/ContentStoreEUAS: Failed to commit the deferred actions
06-01 15:51:05.351 12251-12267/? D/NetworkSecurityConfig: No Network Security Config specified, using platform default
06-01 15:51:05.366 12251-12251/? W/BluetoothCrashResolver: Can't read macs from BluetoothCrashResolverState.txt
06-01 15:51:05.371 12251-12251/? W/ModelSpecificDistanceCalculator: Cannot find match for this device. Using default
06-01 15:51:05.371 12251-12251/? W/ModelSpecificDistanceCalculator: Cannot find match for this device. Using default
06-01 15:56:17.210 16969-16969/? D/MyApplication: Got a didDetermineStateForRegion call: 2f234454-cf6d-4a0f-adf2-f4911ba9ffa6
【问题讨论】:
-
您使用的是什么库版本?在扫描开始时捕获包含系统日志的 LogCat 摘录以查看操作系统是否阻止扫描可能会有所帮助。库版本 2.9+ 应该会根据需要自动减慢 Android N 的扫描周期。原因可能不是您想的那样。
-
我使用的是2.9.2版本,但是如果我不检查版本,logcat上会多次出现此消息:“应用扫描太频繁”。 Beacon 集合的大小始终为 == 0。我用 logcat 的一些消息编辑了帖子。
-
哇...我发现了问题。这是具有中心角色的设备禁用了位置设置......我的可怕错误。您能否回答解释为什么应该激活位置设置(不仅是清单上的权限)以及是否可以避免?有没有办法在不启用位置设置的情况下使信标扫描工作?
标签: android bluetooth-lowenergy ibeacon-android altbeacon