【问题标题】:Sensor event listener not working in background service传感器事件侦听器在后台服务中不起作用
【发布时间】:2019-03-07 13:28:11
【问题描述】:

我创建了一个计步器服务,以使用 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
        }

    }

从 Activity 的 mainactivity 启动服务

 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 kotlin event-listener background-service firebase-job-dispatcher


【解决方案1】:

如果您使用 Android Pie 在 Android 设备上进行测试

请通过 Android Pie 的此行为更改:

使用连续报告模式的传感器(例如加速度计和陀螺仪)不接收事件。

Android Pie Changes

希望对你有帮助

【讨论】:

  • 如果我尝试在 Android 8.1 上做同样的事情会怎样?
  • #Rajan 那么在这种情况下,如果应用程序在后台运行并且设备处于锁定模式,传感器将不会提供任何更新。是否正确,请告诉我。如果我错了
  • #hemandroid 是的,你是对的。它不会为您提供更新,除非您在前台运行该服务。
猜你喜欢
  • 1970-01-01
  • 2019-08-14
  • 2022-01-14
  • 2017-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多