我有一个应用程序,我在其中轮询传感器以获取加速度数据并将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中传感器融合方式的限制?如果是后者,在使用融合传感器时,如何在滤除重力后获得加速度计值的更高精度?
答案 0 :(得分:0)
据我所知,您无法改变Android上硬件传感器的准确性。您只能使用SensorManager
类中的registerListener()方法调整采样周期,或通过SensorEventListener
接口的onAccuracyChanged()回调监控精度更改。
看起来您正在代码片段中正确检索传感器读数。
我建议做以下事情:
如果您在应用上述建议后没有发现任何差异,我认为我们无法提高传感器读数的准确度。
此外,我前段时间使用Nexus 5和Nexus 6在Android上使用传感器进行了一些实验,我发现不同的传感器具有不同的精度,您也注意到了。据我所知,我们无法从Android SDK API级别控制它。