我已经将How to:Get Data from the Compass Sensor for Windows Phone中的代码安装到我的开发解锁的运行芒果的HTC Trophy 7手机上。
返回的磁北方向似乎是正确的。我将其与传统指南针和iPhone指南针应用程序进行了比较,结果显示,航向或多或少都是相同的。
然而,CompassReading.TrueHeading返回的值似乎明显偏离。
对于我的位置,我查了一下磁偏角:
纬度:41°22'36.5"S经度:东经173°16'34.9"磁偏角:22°2'东拒绝是积极的倾斜度:-66°49'磁场强度:56492.9 nT
手机显示的磁偏角约为东经130°。
我不认为是我对演示代码的实现造成了问题,因为我从市场上得到了许多其他应用程序的相同错误值。
手机/框架如何设置TrueHeading的值
我是否需要对locaiton服务做些什么,以便确定正确的值?
我试着向HTC寻求支持,但他们表示这可能是操作系统问题。
我在Microsoft Answers上也问了一个类似的问题-HTC Trophy 7在使用指南针时无法正确确定正北
我们花了很长时间研究不同的读数及其含义。我建议将你从应用程序中获得的结果与市场上其他能给你带来北向的应用程序进行比较。例如HeadsUpCompass(我们的)、Compass VO、Compass 7是我上次检查的。
我的经验是,CompassReading在手机电量不足的情况下会出现问题。因此,当手机直立时,我们使用了Motion API来计算手机的航向,而当手机平放时,我们则使用了Compass API。我已经检查了HUC的代码,我们使用的是compassSensor.CurrentValue.TrueHeading有标题。这是在HTC HD7、Mazza和Trophy(我们当时拥有的)上测试的。
希望这能帮助
我打赌你住在南半球。
据我所知,芒果有一个返回正确赤纬的软件问题,这种情况只发生在南半球。
这已经有一段时间了,但不幸的是,没有补丁或bug修复。。。
由于它在北半球有效,居住在北半球的人们在许多论坛上都声称它效果良好。
我已经开始通过将Microsoft.Devices.Sensors.dll从加载到ILSpy来跟踪正在发生的事情
%程序文件%\Reference Assemblys\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\Microsoft.Devices.Sensors.dll
CompassReading上有一个内部构造函数,它从CompassNativeSample的实例中获取TrueHeading值。
internal CompassReading(CompassNativeSample nativeSample)
{
this = default(CompassReading);
this.Timestamp = nativeSample.header.TimeStamp;
this.HeadingAccuracy = (double)nativeSample.wErrorMargin;
this.TrueHeading = (double)nativeSample.wBearing;
this.MagnetometerReading = new Vector3(nativeSample.vecMagCalibrated.X, nativeSample.vecMagCalibrated.Y, nativeSample.vecMagCalibrated.Z);
this.MagneticHeading = (uint)nativeSample.wBearing - nativeSample.dwDeclAngle;
}
然后根据TrueHeading(wBearing)和dwDeclAngle?确定MagneticHeading?这让我有点困惑,因为MagneticHeading似乎是正确的。
据我所知,CompassNativeSample是通过SensorsNative.ddl的COM互操作产生的。下面有点像黑盒子。