如何设置 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" />
我有一个实现前台服务的 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" />