過去幾天我一直在研究一個小羅盤應用程序,並且已經開始運行代碼,但是看起來羅盤閱讀並不準確。在對兩部手機進行校準之後,我的第一個測試是,我發現了這一點,我只是拿着手機對着它,平坦的表面看着讀數,然後水平翻轉並將它放在同一平面上(180 *轉),數值沒有改變180 *它接近240 *。安卓羅盤看起來不可靠
然後我測試了讀數與指南針,有時讀數似乎很接近,但在其他地方它超過50 * off。我甚至試圖把我的手機和指南針放在地板上,使圓規遠離任何磁性干擾,並得到相同的結果(請注意,我還要保持指南針和手機分開,通過排列書本邊緣來保持它們在同一個方向) 。
然後我把示例應用程序放在另一個手機上(第一個是nexus S,第二個是Motorola droid 1)。在兩部手機之間,差異的範圍從某些點相等,但最多點在50到15度之間。
我查看了文檔,也查看了許多不同的論壇帖子,我沒有看到任何人有相同的結果。我的代碼中可能存在一些小錯誤,導致我的閱讀錯誤地出現,或者我沒有看到某些記錄的錯誤。
任何有識之士或建議將不勝感激!
我的繼承人傳感器在我SensorEventListener類
public void onSensorChanged(SensorEvent event)
{
// If the sensor data is unreliable return
if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE)
{
Toast.makeText(main.this, "Sensor Status Unreliable",Toast.LENGTH_SHORT).show();
}
// Gets the value of the sensor that has been changed
switch (event.sensor.getType())
{
case Sensor.TYPE_ACCELEROMETER:
m_vfgravity = event.values.clone();
break;
case Sensor.TYPE_MAGNETIC_FIELD:
m_vfgeomag = event.values.clone();
break;
}
if (m_vfgravity != null && m_vfgeomag != null)
{
if(SensorManager.getRotationMatrix(m_vfinR, m_vfI, m_vfgravity, m_vfgeomag))
{
SensorManager.getOrientation(m_vfinR, m_vforientVals);
m_fCompBearing = (float) Math.round((Math.toDegrees(m_vforientVals[0])) *2)/2;
//convert to 0-360 from -180-180
if(m_fCompBearing < 0.0)
{
m_fCompBearing = 360 + m_fCompBearing;
}
mCompHead.setText("" + (int)m_fCompBearing);
}
calcOffset();
rotateCmp();
}
}
和代碼在改變代碼事先在創造我的活動
mSMngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSListener = new cSensorListener();
mSMngr.registerListener(mSListener,
mSMngr.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
SensorManager.SENSOR_DELAY_UI);
mSMngr.registerListener(mSListener,
mSMngr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_UI);
謝謝!
編輯:也嘗試過用最壞的結果與droid X ...當手機滾動45度(繞z軸旋轉一個電腦座標系統)返回的指南針標題可以改變超過180度,在事實上,當朝相同方向旋轉時,標題值與其他手機的相反方向相反。即使在設置中進行校準後,這也是唯一能夠產生此結果的手機。另外他們是一個指南針我測試的動態壁紙不具有相同的問題。所以我會假設我會在軟件中做些什麼來避免這種情況。
你確定Android是問題,而不是硬件? – 2011-06-06 19:09:39
差異的一個明顯來源是磁性與真北方。 FWIW,我的基本garmin gps單位直指前進,如果你轉圈不動。使用這些基本的GPS單元的唯一方法是將其指向旅行和_move_ forward方向。這可能與你的問題沒有關係,但? – JAL 2011-06-06 22:16:31
首先感謝您的快速解答。以及傳感器管理器始終應該返回磁北,GPS將返回真北,因爲它使用基於真北的緯度/經度上的運動方向。至於它是一個硬件問題,這是一種可能性,但是我看到應用程序會全面返回類似的結果,並想知道如何做到這一點。我也測試過DroidX,並且結果在Droid X上有很大的不同,我的指南針圖像甚至在相反的方向旋轉? – ocross 2011-06-06 23:14:01