2016-08-03 64 views
3

我正在尋找替代已棄用的Android傳感器Sensor.TYPE_ORIENTATION的解決方案。已棄用的Sensor.TYPE_ORIENTATION的等效替換

最報告解決方案是Sensor.TYPE_ACCELEROMETERSensor.TYPE_MAGNETIC_FIELD結合,然後通過使用SensorManager#getRotationMatrix計算旋轉矩陣,將獲得的歐拉角通過使用SensorManager#getOrientation。 另有報道解決方案是使用Sensor.TYPE_ROTATION_VECTOR,這也與旋轉矩陣結束和歐拉角通過使用SensorManager#getOrientation

不幸的是旋轉所述移動設備時,那些表現到TYPE_ORIENTATION完全不同。當手機放在桌子上時,嘗試兩種類型,然後將其調高(俯仰)至90°(屏幕現在直接朝向您)。計算出的方位角和滾轉歐拉角變得非常狂野(原因是Gimbal lock問題),而用TYPE_ORIENTATION檢索的度數值非常穩定(不準確但非常好)。 TYPE_ORIENTATION的每個值(偏航,俯仰和滾轉)似乎都是某種「預測」程度,而沒有萬向節鎖定問題。

沒有使用折舊的TYPE_ORIENTATION傳感器(可能來自旋轉矩陣),獲得類似程度(偏航,滾動和俯仰)的方法是什麼? TYPE_ORIENTATION算法是如何在內部執行的?

回答

1

azimuth in getOrientation是磁​​性北極與設備y軸投影到世界x-y平面之間的角度。當設備達到90°時,投影是零矢量,因此方位角在這種情況下沒有意義,可以是任何值。在物理上,試圖找出磁北和指向天空的矢量之間的角度是沒有意義的。 你應該看看我的項目https://github.com/hoananguyen/dsensor/blob/master/dsensor/src/main/java/com/hoan/dsensor_master/DProcessedSensor.java

+0

如何檢測正確的方向和旋轉風景/肖像? –

相關問題