我使用Android N设备(Moto G第5代)测试应用程序,并且始终未找到任何信标(beacons.size()== 0),但与其他具有较低API的设备工作正常......只能在此设备上失败。扫描信标不适用于Android N设备
我检查扫描限制比谷歌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 ...),代码正常工作。
----- ----- UPDATE
的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
你使用的是什么库版本?当扫描开始查看OS是否阻止扫描时,捕获LogCat摘录(包括系统日志)可能会有所帮助。库版本2.9+会根据Android N的需要自动减慢扫描周期。原因可能与您的想法不同。 – davidgyoung
我使用的是版本2.9.2,但是如果我没有检查版本,这条消息会在logcat上出现好几次:“应用程序扫描得太频繁”。信标集合总是大小为0.我用logcat中的一些消息编辑了帖子。 – adri1992
哇...我发现了这个问题。这是具有中心角色的设备的位置设置被禁用...我可怕的错误。你能否回答解释为什么位置设置(不仅仅是清单上的权限)应该被激活,以及是否可以避免?有没有办法让信标扫描在没有启用位置设置的情况下工作? – adri1992