我正在尝试创建一个前台服务,可以使用加速度计传感器跟踪手机的线性加速度。我有一个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)
。