2

私は実行中のトラッカー/歩数計アプリを開発しています。同じためにジオロケーターを使用しています。ジオロケーターの移動しきい値プロパティを 10 に維持しています。これが私のコードです。

ボタンクリックイベント

 private void StartButton_Click(object sender, RoutedEventArgs e)
        {
            myLocator = new Geolocator();
            myLocator.DesiredAccuracy = PositionAccuracy.Default;
            myLocator.MovementThreshold = 10;
            myLocator.ReportInterval=500;
            myLocator.PositionChanged += myGeoLocator_PositionChanged;
            _startTime = System.Environment.TickCount;
            _timer.Start();
        }
 void myGeoLocator_PositionChanged(Geolocator sender, PositionChangedEventArgs args)
        {
            Dispatcher.BeginInvoke(() =>
            {
                var coord = new GeoCoordinate(args.Position.Coordinate.Latitude, args.Position.Coordinate.Longitude);
                if (_line.Path.Count > 0)
                {
                    var previousPoint = _line.Path.Last();
                    distance += coord.GetDistanceTo(previousPoint);
                    var millisPerKilometer = (1000.0 / distance) * (System.Environment.TickCount - _previousPositionChangeTick);
                    _kilometres += Math.Round(distance, 2);
                    distanceLabel.Text = string.Format("{0:f2} meters", _kilometres);
                    MessageBox.Show("Changed");
                }
                else
                {
                    Map.Center = coord;
                }
                _line.Path.Add(coord);
                _previousPositionChangeTick = System.Environment.TickCount;
            });
        }

問題は、位置変更イベントが 1 回しか呼び出されないことです。ロケーション ポイントを変更してエミュレータでコードをデバッグしようとしていますが、それでもイベントは呼び出されません。私はどこで間違っていますか??

4

1 に答える 1

2

コードは実際のデバイスで動作します。ただし、エミュレータでテストするには、DesiredAccuracyプロパティを に設定してみてくださいHigh

Windows Phone の位置情報データを使用するアプリをテストする方法から:

アプリで GeoCoordinateWatcher クラスを使用する場合、位置センサー シミュレーターでアプリをテストする前に、コンストラクターまたはクラスの DesiredAccuracy プロパティで GeoPositionAccuracy.High の値を指定する必要があります。精度をデフォルト値の GeoPositionAccuracy.Default のままにしておくと、PositionChanged イベントは、位置センサー シミュレーターで発生した位置の変化を認識しません。

問題を解決するように見えるネイティブ マップ アプリを実行することで構成される別の回避策もあります。

  1. エミュレーターで現在の場所を設定します。
  2. アプリを実行します。現在の場所をレドモンドとして報告します。
  3. マップ アプリケーションを実行します。手順 1 で設定した場所に正しく移動します。
  4. アプリを再度実行します。正しい現在地を使用するようになりました。

ソース: http://social.msdn.microsoft.com/Forums/wpapps/en-US/c2cc57b1-ba1f-48fb-b285-d6cfbb8f393a/windows-phone-8-emulator-returns-microsofts-location-only

于 2013-08-22T22:31:01.080 に答える