我正在做一個地圖應用程序,其中包括位置的箭頭,顯示您所面臨的方式,像這樣:如何讓Android手機的方向符合人的方向?
我直接從SensorManager.getOrientation()
獲得方位,使用第一個返回值:方位。當手機被拿着以便屏幕指向地平線上方和縱向時,箭頭正常工作。但是:
- 當手機被握住以便屏幕指向地平線以下時,箭頭指向離用戶面對的方向180度。
- 當手機被拿着讓屏幕的正面與地平線齊平時,箭頭不知道它指向哪個方向。方位角根本不返回有意義的結果。
- 當手機向左或向右傾斜(或保持橫向模式)時,箭頭向左或向右傾斜。
的精心構建及以下科學的圖像顯示了我的意思(其中藍色是用戶的面,紅色的箭頭方向,屏幕大約是面向用戶的臉部,和谷歌地圖不正是我想要的):
(需要注意的是,與谷歌地圖,但沒有成功做名單上的最後兩個動作,如果自動旋轉是關閉的。但是我甚至在那個階段,但其中一個)
看起來好像它是隻需使用如下所示的Y軸指示方向:http://developer.android.com/reference/android/hardware/SensorEvent.html,當我希望它使用Z軸指向方向的大部分時間和Y時,手機是平的。但是,考慮到getOrientation()
返回的值,我不得不編寫複雜的案例來解決一些問題,並且面向電話的用例不可解決。我確定有一個更簡單的方法。
這裏是我的代碼(如果lastAcceleration和lastMagneticField無論是從內部傳感器傳來):
float[] rotationMatrix = new float[9];
if(SensorManager.getRotationMatrix(rotationMatrix, null, lastAcceleration, lastMagneticField)){
float[] orientMatrix = new float[3];
SensorManager.getOrientation(rotationMatrix, orientMatrix);
orientation = orientMat[0]*180/(float)Math.PI;
}
我在做什麼錯?有沒有更簡單的方法來做到這一點?
編輯:只是爲了澄清,我假設用戶將設備拿在他們面前,屏幕指向他們。除此之外,我顯然無法分辨是否只有其中一個旋轉。另外,我正在使用用戶在移動時的動作,但這是在他們靜止時的動作。
+1爲科學圖像 – 2012-04-19 04:33:16
是你的問題解決?你是如何得到lastAcceleration,lastMagneticField的? – 2015-06-24 04:50:41
沒有。從未解決。也許它是永遠不可解決的,而且谷歌地圖似乎並不像我那時那麼聰明。我早已把它從我需要做的任務清單中拋棄了,因爲我不再爲同一家公司工作,更不用說同一個項目了。無論如何,Android現在的工作方式可能完全不同。 – AlbeyAmakiir 2015-06-24 06:10:39