如何设置altbeacon以防止在Android打盹时停止扫描



我有一个Android应用程序,它实现了前台服务,使用部分唤醒锁,并有权使用REQUEST_IGNORE_BATTERY_OPTIMIZATIONS清空电池,如下所述:https://developer.android.com/training/monitoring-device-state/doze-standby

这一切都起作用,服务永远运行,从不打盹。

我的服务使用信标测距并永久报告距离。有了altbeacon,它工作得很好。然而,当屏幕关闭时,大约1到5分钟后,Android电源管理以某种方式启动,altbeacon库调用"RangeNotifier"回调时总是使用空的信标列表。一旦发生这种情况,即使我再次唤醒电话,信标列表也总是空的。

这就是我配置它的方式:

beaconManager = BeaconManager.getInstanceForApplication(this)
beaconManager.setEnableScheduledScanJobs(false)
beaconManager.isRegionStatePersistenceEnabled = false
beaconManager.foregroundBetweenScanPeriod = 0
beaconManager.foregroundScanPeriod = 1100

不知何故,我为自己的服务成功躲避DOZE的手段似乎没有扩展到Altbeacon服务。我该如何改变这一点,让altbeacon永远扫描?

编辑:Manifest.xml 中的相关部分

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hollyhook.oscHook">
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<!-- for beacons -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-feature android:name="android.hardware.sensor.accelerometer"
android:required="true" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity>
... removed for brevity
</activity>
<service
android:name=".OscHookService"
android:enabled="true"
android:exported="true">
</service>
</application>
</manifest> 

我正在测试安卓10三星S10。如果有帮助的话,我可以提供一个带有BeaconManager.setDebug(true)的Android日志(它很长,很吵(

非常感谢您的帮助!

我找到了解决方案。如下所述:https://altbeacon.github.io/android-beacon-library/requesting_permission.html

由于目标SDK 29+在后台访问信标需要在清单中声明此权限:

<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

最新更新