查找位置MVVMCross的地址
本文关键字:地址 MVVMCross 位置 查找 | 更新日期: 2023-09-27 18:01:24
我目前正在使用MVVMCross android使用下面的代码的位置。我正在处理视图上的位置更新,使用命令访问GeoCoder对象&获取地址数据。我已经采取了一些代码从这个问题上所以,但似乎ViewModel驻留在同一个项目,而不是在核心。我想知道这是否是实现这一目标的正确方法,或者我应该使用另一种方法
视图模型strong>'
public IMvxCommand LocationUpdate { get; set; }
public LocationViewModel(IMvxLocationWatcher locationWatcher)
{
_locationWatcher = locationWatcher;
FindCurrentLocation();
_timer = new Timer(OnTick, null, 1000, 1000);
}
private void OnLocation(MvxGeoLocation location)
{
Lat = location.Coordinates.Latitude;
Lng = location.Coordinates.Longitude;
if(LocationUpdate != null)
LocationUpdate.Execute();
_locationFound = true;
_locationWatcher.Stop();
}
private void FindCurrentLocation()
{
_locationFound = false;
_locationWatcher.Start(new MvxLocationOptions { Accuracy = MvxLocationAccuracy.Fine }, OnLocation, OnLocationError);
}
<
视图/strong>
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.LocationView);
_viewModel = (LocationViewModel) ViewModel;
_viewModel.LocationUpdate = new MvxCommand(LocationUpdated);
/* Initialisation code */
}
private void LocationUpdated()
{
var options = new MarkerOptions();
LatLng latLng = new LatLng(_viewModel.Lat, _viewModel.Lng);
options.SetPosition(latLng);
options.SetTitle(_viewModel.SiteName);
_site = _fragment.Map.AddMarker(options);
_fragment.Map.AnimateCamera(CameraUpdateFactory.NewLatLngZoom(latLng, 12));
Geocoder geocdr = new Geocoder(BaseContext);
IList<Address> addresses = geocdr.GetFromLocation(_viewModel.Lat, _viewModel.Lng, 1);
if (addresses.Any())
{
Address address = addresses.First();
_viewModel.SiteName = address.GetAddressLine(0);
_viewModel.SiteAddress = string.Concat( address.GetAddressLine(1),", ",
address.GetAddressLine(2), ", ", address.GetAddressLine(3));
}
}
你可能想把它创建为一个插件,在那里你创建一个接口,描述如何从坐标中获取地址,并返回它。
那么您将需要为每个需要它的平台实现特定于平台的实现。
你可以在这里阅读更多关于插件的内容:https://github.com/MvvmCross/MvvmCross/wiki/MvvmCross-plugins