我无法让 GPS 工作

Posted

技术标签:

【中文标题】我无法让 GPS 工作【英文标题】:I can't get the GPS to work 【发布时间】:2011-07-15 07:36:35 【问题描述】:

我正在使用此页面中的类来获取我的 Windows Phone 上的当前位置坐标:http://www.codeproject.com/Articles/134982/A-helper-class-to-get-the-current-location-on-a-Wi

我不知道为什么我总是得到“未知”位置。我尝试了更简单的方法来获取位置,但没有成功。 我的 GPS 工作正常,因为我喜欢 Maps appand walk,而且我可以看到该地点正确移动。 我检查了 GeoCoordinateWatcher.Permisson 属性,其值为“Granted”。我已经在 WMAppManifest.xml 中有这一行 <Capability Name="ID_CAP_LOCATION"/>

我不明白我上面给出的地址中的代码是这几行:

var immediate = new ImmediateLocation(x => location = x);
immediate.GetLocation();

GeoCoordinate location;

为什么使用后要声明位置?我之前声明过。有什么我应该知道的吗?

[编辑]

现在我已经理解了 lambda 表达式我得到了两个例外:

A first chance exception of type 'System.NullReferenceException' occurred in System.Device.dll
A first chance exception of type 'System.Reflection.TargetInvocationException' occurred in mscorlib.dll

这是堆栈跟踪

en System.Device.Location.GeoCoordinateWatcher.<>c__DisplayClass6.<OnPositionStatusChanged>b__4(Object _)
en System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)
en System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)
en System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
en System.Delegate.DynamicInvokeOne(Object[] args)
en System.MulticastDelegate.DynamicInvokeImpl(Object[] args)
en System.Delegate.DynamicInvoke(Object[] args)
en System.Windows.Threading.DispatcherOperation.Invoke()
en System.Windows.Threading.Dispatcher.Dispatch(DispatcherPriority priority)
en System.Windows.Threading.Dispatcher.OnInvoke(Object context)
en System.Windows.Hosting.CallbackCookie.Invoke(Object[] args)
en System.Windows.Hosting.DelegateWrapper.InternalInvoke(Object[] args)
en System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(IntPtr pHandle, Int32 nParamCount, ScriptParam[] pParams, ScriptParam& pResult)

我找到了这个,我不确定它是否与我的案例有关,但如果它可以帮助某人帮助我......

http://onebusawaywp7.codeplex.com/workitem/14695

【问题讨论】:

你怎么知道它不起作用?我这样说是因为当位置发生变化时(在你给 ctor 的动作中)你通常应该有一些 UI 触发器 我会去看看行动是如何运作的。如果那时我仍然不知道如何解决这个问题,我会在这里发布。如果有人知道任何可以帮助我解决这个问题的链接,请分享:) 我已经用我的实际问题编辑了帖子 给我错误的行是这一行:_watcher.StatusChanged -= new EventHandler(_watcher_StatusChanged);如果我将其注释掉,那么我可以处理 NullReferenceException 并且一切正常 【参考方案1】:

您向 ImmediateLocation 构造函数提供一个 Action 参数。去研究一些关于 lambda 表达式的东西 - 然后你会发现这个位置在它声明之前没有被使用。

就“未知”位置而言,没有人可以在不了解 ImmediateLocation 类的情况下回答。以发布的here 为例:在您调用 GetLocation 后,该位置会异步填充,即有时在将来。如果您立即测试该值,那么您必须失败。在我看来,这个类只是设计错误。

【讨论】:

我已经发布了该课程的链接。您提供的链接与我发布的页面完全相同。很抱歉因为我缺乏知识而打扰你,我才刚刚开始。但是,如果我在该行之后声明该位置,Visual Studio 就会抱怨。但是谢谢你告诉我那个表情是什么,因为我以前没见过。我试图搜索它是如何工作的,但没有任何线索我找不到它

以上是关于我无法让 GPS 工作的主要内容,如果未能解决你的问题,请参考以下文章

Android:GPS位置无法正常工作

如果 gps 暂时不可用,Cordova 地理定位插件无法正常工作

无法找到苹果 GPS 的隐私 - 位置始终使用说明

当设备通过汽车中的 USB 端口连接到 FM 发射器时,GPS 无法工作或更新非常慢

棒棒糖和棉花糖 gps 问题无法获取经度和纬度值,但在 21 以下的 api 上工作的代码相同

Android GPS networkProvider 不工作