You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在应用处于后台或被杀死时接收计步器事件?

实现全场景计步器事件监听的可行方案

1. 前台服务+传感器监听(实时监听核心方案)

从Android 8.0开始,后台应用的传感器监听会被系统严格限制,普通后台监听根本无法持续生效。要实现实时监听,必须把传感器监听逻辑放在前台服务里:

  • 编写一个前台服务,在服务内部通过SensorManager注册计步器(推荐用StepCounter,可累计设备重启后的总步数)的监听器。
  • 服务启动时必须弹出一个前台通知(可以做低存在感的样式,比如仅显示“计步中”),这样系统才会将服务判定为前台优先级,不会轻易回收。
  • 权限要配全:API 31+需要FOREGROUND_SERVICE_SENSORS,API 29+需要ACTIVITY_RECOGNITION,且必须动态申请这些权限,否则监听器无法正常注册。

2. 历史步数补全(应对应用被杀场景)

就算前台服务做得再完善,也有可能被用户手动杀掉或厂商系统强制清理。这时候可以用StepCounter的历史数据来补全:

  • 每次监听到步数变化时,将当前总步数存储到本地(比如SharedPreferences或Room数据库)。
  • 应用重启后,直接读取StepCounter的当前总步数,和本地存储的数值对比,差值就是应用被杀期间新增的步数,据此触发通知。
  • 这个方案不需要持续保持监听,能覆盖应用被杀后的步数统计需求。

3. WorkManager定期同步(补充方案)

你之前用PeriodicWorker没效果,是因为系统对后台任务的调度限制(比如Doze模式、App Standby),优化配置后可作为兜底:

  • 创建PeriodicWorkRequest时,设置合理约束(比如setConstraints(new Constraints.Builder().setRequiresBatteryNotLow(true).build())),重复间隔设为系统允许的最小值15分钟。
  • 在Worker内部获取当前总步数,和本地历史值对比,有变化就发送通知。
  • 这个方案做不到实时,但能定期同步步数,作为实时监听的补充。

避坑提醒

  • 小米、华为、OPPO等厂商的定制系统后台管控极严,一定要引导用户把应用加入后台白名单和自启动权限,否则前台服务也可能被强制终止。
  • 持续监听传感器会消耗电量,建议做个手动开关,或根据时间自动暂停(比如夜间0点到6点停止监听),平衡功能和功耗。

内容的提问来源于stack exchange,提问作者Zelig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 21:12:29