【发布时间】:2021-10-28 04:54:36
【问题描述】:
我正在尝试使用 Accelerometer 传感器创建一个可以跟踪手机线性加速度的前台服务。我有一个实现Service() 和SensorEventListener 的ForegroundService 类。我有两个像这样初始化的全局变量:
mSensorManager = getSystemService(SENSOR_SERVICE) as SensorManager
mAccelerometer = mSensorManager!!.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION)
然后我注册监听器,然后覆盖onSensorChanged(),我应该在其中记录一些值,但没有显示任何内容(这意味着该函数根本没有运行)。为什么会这样?谢谢。
编辑:在我发布答案后进行了更多测试,我注意到问题在于 Android 不会更新传感器上的值(至少是线性加速度)当屏幕关闭时。该服务显然会继续运行,因为其他任务(如位置)确实会更新,但线性加速度传感器会停止。一旦屏幕再次打开,它就会开始获得应有的更新。如何解决这个问题?
【问题讨论】:
-
您是否真的在任何地方请求更新?我在您的代码中没有看到它。你得到的只是传感器的一个表示。
-
@GabeSechan 实现“SensorEventListener”并覆盖“onSensorChanged”方法不就足够了吗?它在正常活动中工作(当屏幕打开时等)。
-
不,仅仅定义函数是不够的。您需要要求操作系统开始发送您的数据。调用是 sensorManager.registerListener(listener, sensor, frequency)。还记得在完成后取消注册。
标签: java android kotlin gps location