我正在制作一款游戏,它使用设备的加速度计来填充进度条。 在我的 Note 2 上,上下摇动手机大约需要 20 秒才能填满该条,但我在 ZTE Blade 上试过,只用了 4 秒。
有什么方法可以在我的代码中校准加速度计吗?这就是我正在做的:
@Override
public void onSensorChanged(SensorEvent event) {
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
if (!mInitialized) {
mLastX = x;
mLastY = y;
mLastZ = z;
mInitialized = true;
} else {
float deltaX = Math.abs(mLastX - x);
float deltaY = Math.abs(mLastY - y);
float deltaZ = Math.abs(mLastZ - z);
if (deltaX < NOISE) deltaX = (float)0.0;
if (deltaY < NOISE) deltaY = (float)0.0;
if (deltaZ < NOISE) deltaZ = (float)0.0;
mLastX = x;
mLastY = y;
mLastZ = z;
if(deltaY == 0){
return;
}
sProgress += deltaY;
pb.setProgress(sProgress);
}
}
最佳答案
问题可能与加速度计的频率有关。注册时不要使用以下 android 常量。
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
这些值对于不同的设备是不同的。
int SENSOR_DELAY_FASTEST get sensor data as fast as possible
int SENSOR_DELAY_GAME rate suitable for games
int SENSOR_DELAY_NORMAL rate (default) suitable for screen orientation changes
int SENSOR_DELAY_UI rate suitable for the user interface
使用以微秒为单位的硬编码值,例如频率 1 Hz
mSensorManager.registerListener(this, mAccelerometer,1000000);
希望它能解决。
关于android - 跨多个设备的不同加速度计值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14320685/