【问题标题】:WP - How to constantly update my locationWP - 如何不断更新我的位置
【发布时间】:2013-05-01 08:44:51
【问题描述】:

当前,当我通过模拟器将其更改为其他位置时,我的位置不会更新。但是在我重新启动我的应用程序后它会改变。这是我在应用启动时写的

    private void Application_Launching(object sender, LaunchingEventArgs e)
    {
        IsolatedStorageSettings Settings = IsolatedStorageSettings.ApplicationSettings;
        GeoCoordinate DefaultLocation = new GeoCoordinate(-6.595139, 106.793801);
        Library.GPSServices MyGPS;

        if (!Settings.Contains("FirstLaunch") || (bool)Settings["FirstLaunch"] == true)
        {
            Settings["FirstLaunch"] = false;
            Settings["LastLocation"] = DefaultLocation;
            Settings["SearchRadius"] = 1;
        }

        //If key not exist OR key value was set to false, ask for permission to use location
        if (!Settings.Contains("LocationService") || (bool)Settings["LocationService"] == false)
        {
            var result = MessageBox.Show(
                "Jendela Bogor need to know your location to work correctly, do you want to allow it?",
                "Allow access to your location?",
                MessageBoxButton.OKCancel);

            if (result == MessageBoxResult.OK)
            {
                Settings["LocationService"] = true;
                MyGPS = new Library.GPSServices();
            }
            else
            {
                Settings["LocationService"] = false;
            }

            Settings.Save();
        }

        else if ((bool)Settings["LocationService"] == true)
        {
            MyGPS = new Library.GPSServices();
        }
    }

我将我的位置存储在我的应用程序设置 IsolatedStorage 中,名称为 Settings["LastLocation"]

我应该如何使用 MVVM 模式(MVVM-Light)在后台不断更新我的位置,以便在 ThirdPageView 的地图上我的PushPin 始终更新?

编辑

   public GPSServices()
    {
        if ((bool)Settings["LocationService"] == true)
        {          
            if (_watcher == null)
            {
                _watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
                _watcher.MovementThreshold = 20;
            }

            StartWatcher();

            _watcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(watcher_PositionChanged);
            _watcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(watcher_StatusChanged);
        }
        else if ((bool)Settings["LocationService"] == false)
        {
            StopWatcher();
        }
    }

    private void StartWatcher()
    {
        _watcher.Start();
    }

    private void StopWatcher()
    {
        if (_watcher != null)
            _watcher.Stop();
    }

    private void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
    {
        if (e.Position.Location.IsUnknown)
        {
            MessageBox.Show("Please wait while your position is determined....");
            return;
        }

        Settings["LastLocation"] = e.Position.Location;
        Settings.Save();
    }

【问题讨论】:

    标签: mvvm windows-phone mvvm-light


    【解决方案1】:

    这对你有帮助吗?使用 GeocoordinateWatcher.PositionChanged 事件?

    public Location()
        {
            GeoCoordinateWatcher location == new GeoCoordinateWatcher();
            location.PositionChanged += new  EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(location_PositionChanged);
            location.Start();
        }
    
    
        //event to track the location change
        public void location_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
        {
    
        }
    

    【讨论】:

      【解决方案2】:

      System.Device.Location.GeoCoordinateWatcher 提供您所需要的。

      var geoWatcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High);
      // This event fires every time the device location changes
      geoWatcher.PositionChanged += (s, e) => {  
          //e.Position.Location will contain the current GeoCoordinate
      };
      
      geoWatcher.TryStart(false, TimeSpan.FromMilliseconds(2000));
      

      【讨论】:

      • 我的 GPSServices 类包含所有这些,请参阅我编辑的帖子。仍然没有运气。
      • 我没有看到您更新 watcher_PositionChanged 中的任何地图控件。您似乎只是将新位置保存到设置中。您需要在地图上绘制新位置。您的 GPSService 类是否有任何方法可以在地图上绘制位置?
      • 我已经通过查看 Q&A 解决了这个问题,我在 App 类中实例化了我的 GPSService。但是,我不知道什么以及如何使用 Dispatcher。也许通过使用 Dispatcher,我可以更新地图上的新位置?
      • Dispatcher 用于在 UI 线程上执行代码,与更新地图无关。如果您有权访问地图控制变量,则可以在 PositionChanged 方法中绘制更新的位置。
      • 我从 ViewModel 绑定图钉,如何从 GPSService 类更新此属性?
      猜你喜欢
      • 2017-05-09
      • 2022-11-23
      • 1970-01-01
      • 2023-03-19
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      • 2014-09-19
      • 1970-01-01
      相关资源
      最近更新 更多