我试图在Moto 360上以最高采样率读取陀螺仪和linear_acclerometer数据。我将按下手持设备上的按钮,该按钮将在手表上注册传感器并开始记录所有传感器数据,当我按下另一个按钮时,手表将取消注册这些传感器并停止记录。
但是,传感器值有时会变为常数值。我发现如果我重新启动手表,传感器将开始工作并再次产生有意义的传感器值。
有没有人遇到过类似的问题,或者对于为什么会出现这种情况有一些想法?
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);
}
由于
答案 0 :(得分:1)
我没有真正的答案。我只是分享我的问题,因为我觉得他们非常相似。问题发生在 Moto 360 上,未在其他设备上测试过。
我使用磁传感器。
mMagneticSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
我将片段注册为新值的监听器。
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更快的数据速率续订,因为我每次获得一个新值时都在修改位图。也许缓冲区已经满了,并没有被清空......也许
无论如何,如果我得到关于这个主题的一些消息,我会更新这篇文章。