过去几天我一直在研究一个小罗盘应用程序,并且已经开始运行代码,但是看起来罗盘阅读并不准确。在对两部手机进行校准之后,我的第一个测试是,我发现了这一点,我只是拿着手机对着它,平坦的表面看着读数,然后水平翻转并将它放在同一平面上(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