2016-03-27 95 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級別控制它。