在Xamarin Forms文件中,我有一个带有方法的接口:GetCurrentLocation和两个属性(两个字符串):纬度和经度。
在Xamarin iOS文件中,我有一个与前面提到的接口连接的类。该方法(现在阐述)指出,在激活时,它创建一个MKMapView,得到用户的lat。和long。,并将它们设置为等于lat。而且很长。类的属性(如下所示)。
public string latitude { get; set; }
public string longitude { get; set; }
public void GetCurrentLocation () {
var vm = new MKMapView();
latitude = mv.UserLocation.Coordinate.Latitude.ToString();
longitude = mv.UserLocation.Coordinate.Longitude.ToString();
}
对于这个例子,这个方法只会被调用一次,目的只是为了得到lat。而且很长。设备并以文本显示。
(在一些依赖服务恶作剧之后......)回到Xamarin Forms文件中,我有一个页面,我在其中调用方法来获取位置,然后使用新获取的坐标来显示设备' s文本中的当前位置。 (我确实在模拟器中设置了一个自定义位置,顺便说一句。)
现在,我的问题是,当我实际运行程序时,显示的字符串表示lat。而且很长。都是0.("纬度= 0,经度= 0")WHYYYYYYYYYYYY?!?!? 终极悲伤的脸
更新:这是我添加NuGet包后的代码---
首先 - IMapView(界面) - 包括以下内容:
public interface IMapView {
double latitude { get; set; }
double longitude { get; set; }
void GetLatandLong ();
IGeolocator locator { get; set; }
Position position { get; set; }
};
第二 - MapView_iOS(本机类) - 包括以下内容:
//Obvious instantiations of the Interfaced Properties...
public async void GetLatandLong () {
locator = CrossGeolocator.Current;
locator.DesiredAccuracy = 100;
position = await locator.GetPositionAsync (timeoutMilliseconds: 10000);
latitude = Convert.ToDouble (position.Latitude);
longitude = Convert.ToDouble (position.Longitude);
}
第三 - App.cs(x.forms类) - 包括以下内容:
//Among other basic startup stuff...
protected override void OnStart()
{
DependencyService.Get<IMapView> ().GetLatandLong();
}
第四和最后 - ContentPage(x.forms类) - 包含:
//Outside of the constructor:
protected override void OnAppearing () {
DisplayAlert ("It Works!", DependencyService.Get<IMapView> ().latitude + " + " + DependencyService.Get<IMapView> ().longitude, "Okay");
}
//Inside of the constructor:
var LabelGest = new TapGestureRecognizer();
LabelGest.Tapped += (s, e) => {
DisplayAlert ("It Works!", DependencyService.Get<IMapView> ().latitude + " + " + DependencyService.Get<IMapView> ().longitude, "Okay");
};
var MyLabel = new Label {
Text = "My Label",
GestureRecognizers = {LabelGest}
};
所以你可以看到我有DisplayAlert显示我在两个不同位置设置的坐标:一次打开页面,一次点击该页面上的某个项目。当我点击该项目时,DisplayAlert会正确激活并给出正确的坐标。但是,第一个DisplayAlert(页面出现时激活的那个)不正确。它会在正确的时间弹出,但它始终会显示&#34; 0 + 0&#34;的消息。 :(这是我问题的最简单的例子。我在一个单独的页面上也有一个这样的地图:
Content = new Map (MapSpan.FromCenterAndRadius (new Xamarin.Forms.Maps.Position
(DependencyService.Get<IMapView> ().latitude, DependencyService.Get<IMapView> ().longitude),
Distance.FromMiles (0.3))) {
IsShowingUser = true,
HeightRequest = 100,
WidthRequest = 960,
VerticalOptions = LayoutOptions.FillAndExpand
}
这会产生类似的结果,开盘位置为&#34; 0,0&#34;在地图上。任何帮助表示赞赏!
答案 0 :(得分:0)
您可以使用https://github.com/jamesmontemagno/Xamarin.Plugins/tree/master/Geolocator
这是Xamarin Forms的插件