在前台服务中使用onSensorChanged()更新



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

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

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

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

尝试确保您正在创建一个实际的前台服务(带有通知和通知通道)。您还请求了适当的权限<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)

最新更新