Android线性加速精度

时间:2016-03-27 12:50:32

标签: android accelerometer sensor android-sensors sensormanager

我有一个应用程序,我在其中轮询传感器以获取加速度数据并将XYZ值保存到SQL DB。 Codewise非常简单:

public void onSensorChanged(SensorEvent event) {
        sensor = event.sensor;

        int i = sensor.getType();
        if (i == MainActivity.TYPE_ACCELEROMETER) {
            accelerometerMatrix = event.values;
        } else if (i == MainActivity.TYPE_GYROSCOPE) {
            gyroscopeMatrix = event.values;
        } else if (i == MainActivity.TYPE_GRAVITY) {
            gravityMatrix = event.values;
        } else if (i == MainActivity.TYPE_MAGNETIC) {
            magneticMatrix = event.values;
        }

        //insert into database

    }

MainActivity.TYPE_ACCELEROMETER只是我在MainActivity类中设置的字段。

如果我将其设置为Sensor.TYPE_LINEAR_ACCELERATION我注意到存储到我的数据库的值的准确性相当低(只有2位小数)。但如果我使用硬件加速度计Sensor.TYPE_ACCELERATION,则精度要高得多(6dp)

我的问题是,我是否错误地检索了线性加速度值,导致我只获得2dp的准确度?或者这只是Android中传感器融合方式的限制?如果是后者,在使用融合传感器时,如何在滤除重力后获得加速度计值的更高精度?

1 个答案:

答案 0 :(得分:0)

据我所知,您无法改变Android上硬件传感器的准确性。您只能使用SensorManager类中的registerListener()方法调整采样周期,或通过SensorEventListener接口的onAccuracyChanged()回调监控精度更改。

看起来您正在代码片段中正确检索传感器读数。

我建议做以下事情:

  • 尝试使用一个传感器来执行相同的测量 检查应用程序行为是否已更改 - 可能是多个读数 导致测量不准确?
  • 尝试在不同的设备上运行此应用程序(如果有的话),并验证行为和准确度是否不同 - 传感器的准确度在不同设备上可能不同?
  • 检查数据库中的准确性和数据类型,并验证它是否正确处理更准确的数据

如果您在应用上述建议后没有发现任何差异,我认为我们无法提高传感器读数的准确度。

此外,我前段时间使用Nexus 5和Nexus 6在Android上使用传感器进行了一些实验,我发现不同的传感器具有不同的精度,您也注意到了。据我所知,我们无法从Android SDK API级别控制它。