我试图在我的Moto 360上以最高的采样率读取陀螺仪和线性加速度计数据。我将按下手持设备上的一个按钮,它将注册手表上的传感器并开始记录所有传感器数据,当我按下另一个按钮时,手表将取消这些传感器的注册并停止记录。
然而,传感器值有时会变成一个恒定值。我发现,如果我重新启动手表,传感器将开始工作,并再次产生有意义的传感器值。
有没有人遇到过类似的问题,或者对为什么会发生这种情况有一些想法?
private void startSensorListeners() {
Log.d(TAG, "startSensorListeners");
isCollecting = true;
//Register the motion Sensor Listener
mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE), SENSOR_DELAY);
mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION), SENSOR_DELAY);
}
public void stopSensorListeners() {
isCollecting = false;
mSensorManager.unregisterListener(this);
}
public final void onSensorChanged(SensorEvent event) {
if(!isCollecting){
mSensorManager.unregisterListener(this, event.sensor);
return ;
}
// Save sensordata into local files, I also output the values[] in event on the logcat to monitor the sensor values in the realtime.
saveData(event);
}
谢谢
我没有一个确切的答案。我只是在分享我的问题,因为我觉得他们很相似。这个问题发生在Moto 360上,没有在其他设备上测试过。
我使用磁传感器。
mMagneticSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
我将我的Fragment注册为一个侦听器来接收新的值。
mSensorManager.registerListener(this, mMagneticSensor, SensorManager.SENSOR_DELAY_NORMAL);
我正在开发一个应用程序。一开始,它们如预期的那样变化,但是,在一个小时后,传感器的值就冻结了,无论如何都保持完全相同。
我怀疑两件事:电池电量和数据速率更新。
也许电池下降到可接受的水平以下(当它停止工作时大约是25%)…这很奇怪,但也不是什么大惊喜。
其次,我记得在某些时候将SensorManager.
SENSOR_DELAY_NORMAL)更改为SensorManager.
SENSOR_DELAY_UI), 在值冻结之前不久。也许这只是个巧合。SensorManager。SENSOR_DELAY_UI是一个比SensorManager更快的数据速率更新。SENSOR_DELAY_NORMAL,当我每次修改位图时,我得到一个新值。可能缓冲区已满而未清空…可能
无论如何,如果我得到一些关于这个主题的新闻,我会更新这篇文章。