android - 跨多个设备的不同加速度计值

标签 android accelerometer

我正在制作一款游戏,它使用设备的加速度计来填充进度条。 在我的 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/

相关文章:

android - 如何使用 Retrofit 2.0 (Kotlin) 正确解析嵌套的 JSON 对象?

android - Android 中的处理程序

空对象引用上的 java.lang.String java.lang.Object.toString()'

java - 如何使用加速度计值显示数字

android - 从记录的加速度计/陀螺仪数据中去除噪声

Android加速度计,传感器使用和功耗

Android 屏幕旋转,ACCELEROMETER_ROTATION

android - Android Gradle构建中的任务执行前该如何做?

Android 11 从 EXIF 获取图像方向

javascript - 如何从 Javascript 访问加速度计/陀螺仪数据?