【问题标题】:Use onSensorChanged() updates inside a foreground service在前台服务中使用 onSensorChanged() 更新
【发布时间】:2021-10-28 04:54:36
【问题描述】:

我正在尝试使用 Accelerometer 传感器创建一个可以跟踪手机线性加速度的前台服务。我有一个实现Service()SensorEventListenerForegroundService 类。我有两个像这样初始化的全局变量:

mSensorManager = getSystemService(SENSOR_SERVICE) as SensorManager
mAccelerometer = mSensorManager!!.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION)

然后我注册监听器,然后覆盖onSensorChanged(),我应该在其中记录一些值,但没有显示任何内容(这意味着该函数根本没有运行)。为什么会这样?谢谢。

编辑:在我发布答案后进行了更多测试,我注意到问题在于 Android 不会更新传感器上的值(至少是线性加速度)当屏幕关闭时。该服务显然会继续运行,因为其他任务(如位置)确实会更新,但线性加速度传感器会停止。一旦屏幕再次打开,它就会开始获得应有的更新。如何解决这个问题?

【问题讨论】:

  • 您是否真的在任何地方请求更新?我在您的代码中没有看到它。你得到的只是传感器的一个表示。
  • @GabeSechan 实现“SensorEventListener”并覆盖“onSensorChanged”方法不就足够了吗?它在正常活动中工作(当屏幕打开时等)。
  • 不,仅仅定义函数是不够的。您需要要求操作系统开始发送您的数据。调用是 sensorManager.registerListener(listener, sensor, frequency)。还记得在完成后取消注册。

标签: java android kotlin gps location


【解决方案1】:

尝试确保您正在创建一个实际的前台服务(带有通知和通知通道)。您还请求了适当的权限 <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> 并为您的传感器注册了一个侦听器,如下所示:

mSensorManager.registerListener(
    this, // if called in your ForegroundService
    mAccelerometer,
    SensorManager.SENSOR_DELAY_NORMAL
)

并取消注册:

override fun onDestroy() {
    mSensorManager.unregisterListener(this)
}

最后,您从一个活动或某种接收者使用startService 启动服务,并在服务的onStartCommand 中调用startForeground(id, notification)

【讨论】:

  • 感谢您的回答。自从我发布问题以来,我已经进行了更多测试,似乎只有在屏幕关闭时它才不起作用。该服务继续运行,因为其他任务确实有效,但似乎 Android 在屏幕关闭时不会更新传感器上的数据......如何解决这个问题?
  • 是的,不幸的是,这是真的。唯一的方法是防止屏幕关闭。 stackoverflow.com/questions/46805637/…
  • 我想我已经读过它在某些设备上有效,但在其他设备上无效。在这种情况下,应用程序可能会检查或让用户检查它是否也可以与前台服务一起使用。你认为这可行吗?
  • 是的,但我怀疑大多数情况下不会。 Android 有相当严格的电池使用优化政策。即使它也可能取决于硬件,例如,您将难以在未来的 Android 版本上维护应用程序。我怀疑您在收集感官数据时无法保持屏幕开启?也许你会尝试批量感官数据而不是唤醒锁stackoverflow.com/questions/30390148/…
  • 一直开着屏幕会有点问题,是的。我现在正在做的是将活动完全变黑并自动将屏幕亮度调到最低,如果可能的话,这并不是我想要保留的。如果使用唤醒锁来防止手机进入睡眠状态,是否仍然可以完全关闭屏幕但保持设备开启以仍然能够获取传感器数据?
猜你喜欢
  • 1970-01-01
  • 2022-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 2020-10-01
  • 2019-10-26
相关资源
最近更新 更多