android - 振动使加速度计给出错误的值

标签 android

我有一个简单的应用程序,可以读取加速器值(对于 x、y 和 z 轴)。但对于某些值(value),我以编程方式振动我的手机。因此,每当振动发生时,加速度计值都会在范围内上下波动。我想避免这种情况。请告诉我如何防止加速度计在振动模式下给出不同的结果。

public void onSensorChanged(SensorEvent event) {

if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER)
return;          
         switch (mDisplay.getRotation()) {
                case Surface.ROTATION_0:
                    x = event.values[0];
                    y = event.values[1];
                    break;
                case Surface.ROTATION_90:
                    x = -event.values[1];
                    y = event.values[0];
                    Log.i("ROT: ", "90");
                    break;
                case Surface.ROTATION_180:
                    x = -event.values[0];
                    y = -event.values[1];
                    break;
                case Surface.ROTATION_270:
                    x = event.values[1];
                    y = -event.values[0];
                    break;
            }
}

谢谢。

最佳答案

您可以使用低通滤波器,这样您就可以滤除高振动。 像这样:

float lastAccel[] = new float[3];
float accelFilter[] = new float[3];
     accelFilter[0] = (float) (alpha * (accelFilter[0] + accelX - lastAccel[0]));
        accelFilter[1] = (float) (alpha * (accelFilter[1] + accelY - lastAccel[1]));
        accelFilter[2] = (float) (alpha * (accelFilter[2] + accelZ - lastAccel[2]));

关于android - 振动使加速度计给出错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8755971/

相关文章:

android - 如何在 Android 上使用 pjsip 发送 dtmf?

android - 如何使用通知图标修复小米特定的 RemoteServiceException?

java - Android应用程序到服务器套接字程序不从应用程序读取字符串

android - 如何检测Android设备中的芯片组信息?

java - 我想创建一个全局 MediaPlayer,无论显示哪种布局,它都会继续播放

java - Firebase 规则 - 只允许用户访问他们自己的数据

java - 服务不接收多媒体按钮单击事件

android - (eclipse 中的 libGDX android)无法实例化 Activity ComponentInfo

Android - API 级别 < 11 的 fragment API

android - 如何在android中自定义ListView的高度?