我创建了一个步骤计数器服务,使用firebase作业调度程序定期记录步骤计数。传感器事件在我的应用程序运行时正在运行并记录步数,并且在应用程序关闭时不记录。
如何在后台服务中侦听传感器事件?
class MyJobService : JobService(), SensorEventListener {
val TAG = "MyJobService"
var sensorManager: SensorManager? = null
var stepsSensor: Sensor? = null
override fun onStartJob(job: JobParameters): Boolean {
sensorManager = applicationContext.getSystemService(Context.SENSOR_SERVICE) as SensorManager
stepsSensor = sensorManager!!.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)
if (stepsSensor != null) {
sensorManager!!.registerListener(this, stepsSensor, SensorManager.SENSOR_DELAY_FASTEST)
} else {
Log.e(TAG, "sensor not available")
}
return true // wait for sensor event
}
override fun onAccuracyChanged(theSensor: Sensor?, accuracy: Int) {
}
override fun onSensorChanged(event: SensorEvent?) {
val latestSensorCount = event!!.values[0].toLong()
Log.e(TAG, "Steps count $latestSensorCount") // works when App / activity is running
}
override fun onStopJob(job: JobParameters): Boolean {
return false
}
}
从活动的主要活动开始服务
val dispatcher = FirebaseJobDispatcher(GooglePlayDriver(this))
val myJob = dispatcher.newJobBuilder()
.setService(MyJobService::class.java)
.setTag("my-jobservice-tag")
.setRecurring(true)
.setTrigger(Trigger.executionWindow(10,20))
.setReplaceCurrent(true)
.build()
dispatcher.mustSchedule(myJob)
如果您使用Android Pie在Android设备上进行测试
请仔细阅读Android Pie中的行为变化:
使用连续报告模式的传感器(如加速度计和陀螺仪)不会接收事件。
希望这有助于你