2016-04-19 20 views
2

私が働いている会社は、フィールドスタッフがGPSの場所を定期的に登録するアプリケーションを使用しています。最初に、System.Device.Location GeoCoordinateWatcherクラス。.netデスクトップアプリケーションでWindows 10の場所にアクセス

Windows 10では、同じコードが正常に機能しなくなり、GeoCoordinateWatcher.PermissionはGrantedを返しますが、各呼び出しごとに未知の位置を引き続き受け取ります。ウィンドウズ8とウィンドウズ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や初期化のミックスを示しており、位置は常に不明です。

アプリケーションが位置情報にアクセスしているという通知が表示され、地図アプリケーションが現在のGPS位置を正しく表示するため、GPSが実際に動作していることを確認できます。

何が起こっているのかをトラブルシューティングしようとする他に何か提案がありますか?

答えて

0

あなたの関数を見た後、私はあなたが実際のgetは、位置が変更されたときに呼ばれるハンドラを持っていないと仮定します。このイベントはPositionChanged Event(please see here)です。これは、位置データの緯度または経度が変更されたときに発生します。

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 
+0

を包ん、我々はもともと私たちの元のWindows 8のプログラムでのPositionChangedが、開始見つかったフィールドテストでかなりの量の後にしていましたウォッチャーと読書は、ポジションが変わったイベントを開始し捕まえるよりもはるかに信頼性が高かった。新しいOSの変更がそのバランスを他の方向から奪ったかもしれないので、私はそれを撃つだろう。 – Wes

関連する問題