Vb.net 在.net桌面应用程序中访问Windows 10上的位置
我工作的公司有一个应用程序,我们的现场工作人员使用该应用程序定期注册他们的GPS位置,我们最初使用System.Device.location GeoCoordinateWatcher类为windows 8 x86编写该应用程序 在windows 10中,相同的代码停止正常运行,GeoCoordinateWatcher.Permission返回已授予的权限,但每次调用我们都会继续收到未知位置。windows 8和windows 10平板电脑都有LTEVb.net 在.net桌面应用程序中访问Windows 10上的位置,vb.net,gps,location,windows-10-desktop,Vb.net,Gps,Location,Windows 10 Desktop,我工作的公司有一个应用程序,我们的现场工作人员使用该应用程序定期注册他们的GPS位置,我们最初使用System.Device.location GeoCoordinateWatcher类为windows 8 x86编写该应用程序 在windows 10中,相同的代码停止正常运行,GeoCoordinateWatcher.Permission返回已授予的权限,但每次调用我们都会继续收到未知位置。windows 8和windows 10平板电脑都有LTE Public Function Ge
Public Function GetLocation() As GeoCoordinate
Dim geoCoordinate As GeoCoordinate
Dim watcher As GeoCoordinateWatcher
watcher = New GeoCoordinateWatcher(GeoPositionAccuracy.High)
watcher.TryStart(False, TimeSpan.FromMilliseconds(15000))
LogToFile("Position Permission: " & watcher.Permission.ToString)
LogToFile("Watcher Status: " & watcher.Status.ToString)
geoCoordinate = watcher.Position.Location
If geoCoordinate.IsUnknown Then
LogToFile("Unknown")
Else
LogToFile(String.Format("Lat: {0}, Long: {1}, H Accuracy: {2}, V Accuracy: {3}, Crse: {4}, Spd: {5}, Alt: {6}", geoCoordinate.Latitude, geoCoordinate.Longitude, geoCoordinate.HorizontalAccuracy, geoCoordinate.VerticalAccuracy, geoCoordinate.Course, geoCoordinate.Speed, geoCoordinate.Altitude))
End If
Return geoCoordinate
End Function
我们的日志文件显示了我们授予权限的每个调用,状态=NoData或初始化,位置始终未知
我们确实在平板电脑上收到一个通知,应用程序正在访问位置信息,我可以确认GPS确实在工作,因为内置的地图应用程序正确显示了当前的GPS位置
是否有人对如何排除正在发生的故障有任何建议?查看您的函数后,我假设您没有在位置更改时调用实际get的处理程序。此事件为
PositionChanged事件
,当位置数据的纬度或经度发生更改时触发此事件
我建议将watcher
的声明更改为类级变量,并将其设置为with events
。例如
Private WithEvents watcher As GeoCoordinateWatcher
现在您可以访问该类的所有其他方法和函数。作为位置更改回调的事件如下所示
Private Sub watcher_PositionChanged(ByVal sender As Object, ByVal e As GeoPositionChangedEventArgs(Of GeoCoordinate))
'here you have access to latitude and longitude coordinates for example...
'e.Position.Location.Altitude etc...
End Sub
所以一切都结束了
Private WithEvents watcher As GeoCoordinateWatcher'declare outside of function....
Public Sub StartLocation()
watcher = New GeoCoordinateWatcher(GeoPositionAccuracy.High)
AddHandler watcher.PositionChanged, AddressOf watcher_PositionChanged
watcher.Start(False, TimeSpan.FromMilliseconds(15000))
End Sub
Private Sub watcher_PositionChanged(ByVal sender As Object, ByVal e As GeoPositionChangedEventArgs(Of GeoCoordinate))
LogToFile("Position Permission: " & watcher.Permission.ToString)
LogToFile("Watcher Status: " & watcher.Status.ToString)
e.* 'whatever you need here...
End Sub
您确实是对的,我们最初在windows 8程序中更改了位置,但经过大量的现场测试后发现,在这种情况下,启动观察程序并读取一次比启动并捕获位置更改事件要可靠得多。不过,我会尝试一下,因为新的操作系统更改可能会使这种平衡偏离另一个方向。