更新GPS地图标记位置Xamarin

时间:2016-10-05 19:32:31

标签: c# android visual-studio xamarin

我正在尝试根据我的位置更新启动时放置的标记的位置。但是,应用程序打开时会放置第一个标记,但不会更新。没有看到任何物理变化,“Timer called”正被写入控制台,所以我知道计时器正在工作。 我的问题:为什么不通过计时器更新我的标记的位置? 此外,如果有更好的方式,我愿意接受建议。

这是我的代码:

GoogleMap mMap;
LocationManager _locationManager;
Location _currentLocation;
String _locationProvider;
TextView addresstxt;
MarkerOptions options = new MarkerOptions();

public void OnMapReady(GoogleMap googleMap)// This works as it should on start up.
{
    mMap = googleMap;
    LatLng latlng = new LatLng(_currentLocation.Latitude, _currentLocation.Longitude);
    CameraUpdate camera = CameraUpdateFactory.NewLatLngZoom(latlng, 18);
    mMap.MoveCamera(camera);


    options.SetPosition(latlng);
    options.SetTitle("Vehicle");
    options.SetSnippet("Your vehicle is here.");
    options.Draggable(false);
    mMap.AddMarker(options);
}

private void CountDown()
{

    System.Timers.Timer timer = new System.Timers.Timer();
    timer.Interval = 1000;
    timer.Elapsed += OnTimedEvent;
    timer.Enabled = true;


}

private void OnTimedEvent(object sender, System.Timers.ElapsedEventArgs e)
{
    Console.WriteLine("Timer called");
    mMap.Clear();
    LatLng latlng = new LatLng(_currentLocation.Latitude, _currentLocation.Longitude);
    CameraUpdate camera = CameraUpdateFactory.NewLatLngZoom(latlng, 18);
    mMap.MoveCamera(camera);

    MarkerOptions options = new MarkerOptions()
        .SetPosition(latlng)
        .SetTitle("Vehicle")
        .SetSnippet("Your vehicle is here.")
        .Draggable(false);

    mMap.AddMarker(options);
}

1 个答案:

答案 0 :(得分:1)

我猜这可能是因为你永远无法知道运行定时器回调的线程,并且通常需要在UI线程上进行UI更新。尝试运行代码以使用RunOnUiThread()更新UI线程上的标记,例如:

RunOnUiThread(() => 
{
    mMap.Clear();
    LatLng latlng = new LatLng(_currentLocation.Latitude, _currentLocation.Longitude);
    CameraUpdate camera = CameraUpdateFactory.NewLatLngZoom(latlng, 18);
    mMap.MoveCamera(camera);

    MarkerOptions options = new MarkerOptions()
        .SetPosition(latlng)
        .SetTitle("Vehicle")
        .SetSnippet("Your vehicle is here.")
        .Draggable(false);

    mMap.AddMarker(options);
});