Android 直线加速精度

Android linear acceleration accuracy

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

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 class 中设置的一个字段。

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

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

据我所知,您无法更改 Android 上硬件传感器的精度。您只能通过 SensorEventListener 接口的 registerListener() method from SensorManager class or monitor accuracy change with onAccuracyChanged() 回调来调整采样周期。

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

我建议做以下事情:

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

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

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