【发布时间】:2016-09-15 22:05:15
【问题描述】:
对于我的硕士论文,我正在开发一个能够从三星 Galaxy S5 的 3 轴加速度计收集数据的 android 应用程序。因为我想跟踪人类活动,我需要大约 50Hz 的采样率。 我通过将采样率设置为 SENSOR_DELAY_GAME 来实现这一点,效果很好。为了检查采样率,我在手机显示屏上显示了包含加速度计数据的列表的长度。手机屏幕打开时一切正常,即使我在不同应用程序之间进行数据收集期间切换。这样做,我在 30 秒内收到了大约 1500 个值,这意味着采样率的准确性适合我的目的。
我现在的问题是,当屏幕超时时,加速度计采样率会降低到 5Hz,当屏幕开启时,加速度计采样率会再次变为 50Hz。有没有办法将加速度计采样率固定为 50 Hz?
PS:我更喜欢不将屏幕永久设置为开启以节省电池寿命的解决方案。
谢谢, 齐吉
编辑:我添加了加速度计所需的必要方法。没有使用现有的方法 onPause()、onStop() 和 onResume(),因为只有当停止按钮单击事件发生时,测量才会停止。
public void initListeners(){
mSensorManager.registerListener(this,
mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_GAME);
}
public void onSensorChanged(SensorEvent event) {
if (startFlag == true) {
switch(event.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
// copy new accelerometer data into accel array
// then calculate new orientation
System.arraycopy(event.values, 0, accel, 0, 3);
calculateAccMagOrientation();
xText.setText("X: " + decimal.format(event.values[0]));
yText.setText("Y: " + decimal.format(event.values[1]));
zText.setText("Z: " + decimal.format(event.values[2]));
xValue.add(event.values[0]);
yValue.add(event.values[1]);
zValue.add(event.values[2]);
try {
xSize.setText(String.valueOf(xValue.size()));} catch(Exception e) {
Toast.makeText(getBaseContext(), "Fehler bei Add to List", Toast.LENGTH_SHORT).show();
}
break;
}
}
}
【问题讨论】:
-
可以分享代码吗?
标签: accelerometer android-sensors