Android 有没有办法强制加速计定期更新?

Android 有没有办法强制加速计定期更新?,android,accelerometer,average,Android,Accelerometer,Average,有没有可能让加速计每秒更新50次?我想这样做的原因是我想让加速计运行,收集它记录的所有不同值,然后返回一个平均值 我最初试图收集所有不同的值 yAverage = yAverage + new y; 然后将其除以一个计数器,该计数器记录了不同记录的数量 counter++; 这两行代码都在“onSensorChanged”方法中,并且将始终一起执行(如中所示,如果一行执行,另一行也将执行,不会失败) 然而,我得到的结果是非常不一致的。如果我把手机平放在桌子上,它会计算出几乎随机不同的平

有没有可能让加速计每秒更新50次?我想这样做的原因是我想让加速计运行,收集它记录的所有不同值,然后返回一个平均值

我最初试图收集所有不同的值

 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]


也许你可以给我们看一些代码?啊,该死的,是的,我不小心把那段代码写错了,“yAverage”对象没有在onSensorChanged方法中定义,它是在另一个类中定义的,我正在静态访问它。我的程序中的实际代码与您使用它的方式相同。我现在就编辑,请你解释一下“结果很不一致”。例如?如果我把手机平放在桌子上,加速度计的值(或多或少)是恒定的,它会在.001区域波动。但它通常会保持稳定的9.8值。所以很明显,如果它不断地在平均值上加9.8,并且每次都计数,那么它应该再次除以9.8。但有时它会给出0.2、0.3、5.0、6.0甚至13.0、14.0之类的值,但手机根本没有移动:Syes唯一不同的是,我有传感器延迟UI,这是最慢的更新。有没有办法将传感器延迟设置为固定值?请尝试registerListener(这是mAccelerometer,0);
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++; 
}