2016-03-27 46 views
0

我有一个应用程序,我在这里轮询加速度数据的传感器并将XYZ值保存到SQL DB中。 Codewise这是很简单的:Android的线性加速度准确性

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

就我所知,您无法更改Android上硬件传感器的准确性。您只能使用registerListener()方法从SensorManager类别或显示器准确度更改与onAccuracyChanged()回调从SensorEventListener界面调整采样周期。

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

我建议做以下的事情:

  • 尝试,如果应用程序的行为发生了变化,只需一个传感器和 检查执行相同的测量 - 也许多个读数 是造成测量误差?
  • 尝试在不同设备上运行此应用程序(如果有),并验证行为和准确性是否不同 - 可能传感器在不同设备上的准确性有所不同?
  • 检查的准确性和数据库中的数据类型和验证,如果它处理更精确的数据正确

如果你没有注意到申请中提到的建议之后的任何区别,我觉得我们不能做增加传感器读数的准确性任何东西。此外,我前段时间使用Nexus 5和Nexus 6在Android上进行了一些实验,我发现不同的传感器具有不同的精度,因为您也注意到了。据我所知,我们无法从Android SDK API级别控制它。