繁体   English   中英

在.net桌面应用程序中访问Windows 10上的位置

[英]Accessing Location on Windows 10 in .net desktop application

我工作的公司有一个应用程序,我们的现场工作人员定期注册他们的GPS位置,我们最初使用System.Device.Location GeoCoordinateWatcher类编写了Windows 8 x86的应用程序。

在Windows 10中,相同的代码停止正常运行,GeoCoordinateWatcher.Permission返回Granted,但我们继续在每次调用时收到未知位置。 Windows 8和Windows 10平板电脑都具有LTE。

    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或Initializing的混合,并且位置始终未知。

我们确实在平板电脑上收到应用程序正在访问位置信息的通知,我可以确认GPS确实正常工作,因为内置地图应用程序正确显示当前的GPS位置。

有没有人有什么建议来尝试解决正在发生的事情?

在查看你的函数之后,我会假设你没有一个处理程序,当位置发生变化时,它会被调用。 此事件是PositionChanged Event (请参见此处) ,当位置数据的纬度或经度发生变化时会触发此事件。

我建议将watcher的声明更改为类级变量,并将其变为WithEvents 例如...

 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM