Android 有没有办法强制加速计定期更新?
有没有可能让加速计每秒更新50次?我想这样做的原因是我想让加速计运行,收集它记录的所有不同值,然后返回一个平均值 我最初试图收集所有不同的值Android 有没有办法强制加速计定期更新?,android,accelerometer,average,Android,Accelerometer,Average,有没有可能让加速计每秒更新50次?我想这样做的原因是我想让加速计运行,收集它记录的所有不同值,然后返回一个平均值 我最初试图收集所有不同的值 yAverage = yAverage + new y; 然后将其除以一个计数器,该计数器记录了不同记录的数量 counter++; 这两行代码都在“onSensorChanged”方法中,并且将始终一起执行(如中所示,如果一行执行,另一行也将执行,不会失败) 然而,我得到的结果是非常不一致的。如果我把手机平放在桌子上,它会计算出几乎随机不同的平
yAverage = yAverage + new y;
然后将其除以一个计数器,该计数器记录了不同记录的数量
counter++;
这两行代码都在“onSensorChanged”方法中,并且将始终一起执行(如中所示,如果一行执行,另一行也将执行,不会失败)
然而,我得到的结果是非常不一致的。如果我把手机平放在桌子上,它会计算出几乎随机不同的平均值,即使传感器值永远不会改变,并且应该总是返回相同的值
有没有更好的方法来计算平均值
我不知道这是否重要,但我正在使用浮点存储记录的值并进行计算
回复谢里夫:
其实里面没有那么多代码,我有3个浮点值,它们从加速度计中得到的值如下:
y=event.values[1];
它位于SensorEventListener中的“onSensorChanged”方法中
我想伪代码应该是这样的:
float yAverage = 0
onSensorChanged{
float y = event.values[1];
if (y < 0){
y = y * -1;
}
yAverage = yAverage + y;
counter++;
}
然后打印到屏幕上
这不是一个复杂的方法,但我就是不明白为什么它如此不准确。我不知道这是否是一个执行错误,但我认为这是一个逻辑错误
SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
Sensor mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
public void onSensorChanged(SensorEvent event) {
float y = event.values[1];
if (y < 0){
y = y * -1;
}
yAverage = yAverage + y;
counter++;
}
SensorManager mssensormanager=(SensorManager)getSystemService(SENSOR\u SERVICE);
传感器mAccelerometer=msSensorManager.getDefaultSensor(传感器类型\加速计);
msSensorManager.registerListener(此、mAccelerometer、SensorManager.SENSOR\u延迟\u正常);
传感器更改时的公共无效(传感器事件){
浮动y=事件值[1];
if(y<0){
y=y*-1;
}
平均值=平均值+y;
计数器++;
}
总结:
- 确保YaAverage是全球性的
- 确保您使用的是类型\加速计
- 不要忘记,当放在桌子上时,由于重力和法向,你会得到较高的值[1]
SensorManager mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
Sensor mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
public void onSensorChanged(SensorEvent event) {
float y = event.values[1];
if (y < 0){
y = y * -1;
}
yAverage = yAverage + y;
counter++;
}