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

How to setup altbeacon to prevent stoping scan when Android dozes

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

一切正常,服务永远运行,永远不会打瞌睡。

我的服务使用信标测距并永久报告距离。使用 altbeacon 效果很好。但是,当屏幕关闭后大约。 1 到 5 分钟后,Android 电源管理以某种方式启动,并且 altbeacon 库调用 'RangeNotifier' 回调总是带有一个空的信标列表。一旦发生这种情况,信标列表将始终为空,即使我再次唤醒 phone。

我是这样配置的:

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> 

我正在使用 Android 10 Samsung S10 进行测试。如果有帮助,我可以提供 Android 日志和 BeaconManager.setDebug(true)(它又长又吵)

非常感谢您的帮助!

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

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

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