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

Android TYPE_SIGNIFICANT_MOTION传感器48小时后返回null问题问询

问题描述

我的Transitions API方案通常在前一两天正常运行,但之后便停止接收更新。经排查发现,需保持SIGNIFICANT_MOTION传感器处于激活状态,才能唤醒相关传感器以维持Transitions API整体运行。

我实现了一个监听器来监测SIGNIFICANT_MOTION传感器的启用状态:

try {
    boolean request = sensorManager.requestTriggerSensor(triggerEventListener, sensor);
    Timber.e("Transitions API is working. If returns false - device is STILL");
} catch (IllegalArgumentException exception) {
    sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    sensor = sensorManager.getDefaultSensor(Sensor.TYPE_SIGNIFICANT_MOTION);

    Timber.e("SensorManager - " + sensorManager + ", sensor - " + sensor); //TODO: Later delete
}

如代码所示,每当触发异常时我会重新初始化传感器以避免后续抛出异常,但日志显示此时sensor为null。

该传感器在前一天能正常返回有效值,但运行约48小时后变为null,且除重启设备外无其他解决办法。

核心问题:为何sensorManager.getDefaultSensor(Sensor.TYPE_SIGNIFICANT_MOTION)在前一天返回有效值,48小时后却返回null并停止工作?这是Transitions API失效的根本原因。

补充信息:

  • 设备:Google Pixel 3A
  • 系统:Android 12
  • 该问题疑似与Google官方记录的Android 12下传感器服务异常问题相关,相关记录显示部分Pixel设备在长时间运行后会出现传感器服务崩溃,导致getDefaultSensor返回null,仅能通过重启恢复。
问题分析与解决建议
  1. 传感器服务资源泄漏/崩溃
    Android 12的SensorService在长时间运行后可能出现资源泄漏或进程崩溃,导致系统无法正确返回传感器实例。这是Pixel 3A等设备在Android 12上的已知问题,当传感器服务异常后,即使重新获取SensorManager,也无法正常初始化传感器,必须重启设备恢复服务。

  2. 异常处理逻辑的局限性
    当前的异常捕获仅处理IllegalArgumentException,但传感器服务崩溃可能引发其他未捕获的异常,且重新初始化的时机仅在触发异常时,无法主动检测传感器服务的存活状态。

  3. 临时修复方案

  • 增加传感器可用性检测:在每次使用传感器前,主动检查sensor是否为null,若为null,尝试多次重新获取(比如间隔1-2秒重试3次),若仍失败则提示用户重启设备。
  • 监听系统广播:注册ACTION_BOOT_COMPLETED广播,在设备重启后自动重新初始化传感器监听器,恢复Transitions API的运行。
  • 后台保活优化:避免不必要的传感器请求频繁触发,减少传感器服务的负载,降低崩溃概率。
  1. 长期解决方案
    等待Google推送系统更新修复该传感器服务的底层bug,或者考虑降级到Android 11(若业务允许),避免该版本特有的传感器服务问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:50:27