android - 传感器事件侦听器在后台服务中不起作用
问题描述
我创建了一个计步器服务,以使用 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
}
}
从 mainactivity 从 activity 开始服务
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 的此行为更改:
使用连续报告模式的传感器(例如加速度计和陀螺仪)不接收事件。
希望这对你有帮助
推荐阅读
- node.js - TypeError:用户不是向模型添加数据的构造函数
- git - 快照版本与发布版本
- python - 如何过滤从python中的websocket api收到的特定消息,因为它们流入并将它们写入CSV
- android - ShapeDrawable 在作为背景时无法正确绘制
- image - 如何使图像具有褪色的陈旧尘土飞扬的外观?
- java - 在 Windows 上将 C++ 套接字句柄传输到 Java
- excel - 遍历文本文件以将行读入excel VBA中的类模块
- javascript - 成功的变量:在循环中运行的 Ajax 未更新
- origen-sdk - 在 Bamboo 中运行 origen-sdk 命令
- html - 在没有容器的情况下强制溢出隐藏