2015-08-13 65 views
1

我們使用TYPE_LINEAR_ACCELERATIONTYPE_GRAVITY傳感器事件價值觀爲我們的可穿戴式應用程序,但對於索尼的SmartWatch 3我們的應用程序不能提供的,因爲缺乏這兩種傳感器軟件傳感器3

官方文檔的兼容性表示

Android開源項目(AOSP)提供了三種基於軟件的運動傳感器 :重力傳感器,線性加速度傳感器和 旋轉矢量傳感器。這些傳感器在Android 4.0和 中進行了更新,現在使用設備的陀螺儀(除了其他傳感器)以提高穩定性和性能。如果您想嘗試使用這些傳感器,您可以使用getVendor()方法和getVersion() 方法(供應商是Google Inc.;版本號爲3)來標識它們。 識別這些傳感器的供應商和版本號是必要的 ,因爲Android系統認爲這三個傳感器爲 輔助傳感器。例如,如果設備製造商提供他們自己的重力傳感器,則AOSP重力傳感器顯示爲 二級重力傳感器。所有這三個傳感器都依賴於一個 陀螺儀:如果設備沒有陀螺儀,這些傳感器不會顯示出來,並且不能使用。

所以我的問題是,如果OEM不提供這三種軟傳感器的主要支持,那麼是否有使用AOSP的方法。我不明白如何使用getVendor()getversion()所說的文檔中提到的方法,它只檢查供應商是誰,版本是什麼。 其他方法是使用濾波器從陀螺儀值中獲取這些重力和線性加速度值,但我不知道如何完全做到這一點以及使用它的注意事項。

PS。 LG G WATCH和Moto 360確實提供這些傳感器,同時我還從getVendor方法中檢查了供應商,其EM Micro用於Sony,Invensense用於G watch。沒有谷歌公司在G中觀看也

回答

0

請參考這個問題Sony SmartWatch 3 (SWR50) no longer returns Sensor.TYPE_LINEAR_ACCELERATION

出於某種原因,「線性加速度」和「重力」傳感器沒有索尼智能手錶3.可以使用加速度傳感器工作正常獲得加速度,應用低通濾波器獲取重力值並減去重力值以獲得「線性加速度」。請參閱下面的代碼示例。

public void onSensorChanged(SensorEvent event){ 
    // In this example, alpha is calculated as t/(t + dT), 
    // where t is the low-pass filter's time-constant and 
    // dT is the event delivery rate. 

    final float alpha = 0.8; 

    // Isolate the force of gravity with the low-pass filter. 
    gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0]; 
    gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1]; 
    gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2]; 

    // Remove the gravity contribution with the high-pass filter. 
    linear_acceleration[0] = event.values[0] - gravity[0]; 
    linear_acceleration[1] = event.values[1] - gravity[1]; 
    linear_acceleration[2] = event.values[2] - gravity[2]; 
}