使用 Xamarin 返回 0 获取当前 gps 位置
Posted
技术标签:
【中文标题】使用 Xamarin 返回 0 获取当前 gps 位置【英文标题】:get current gps location with Xamarin return 0 【发布时间】:2020-05-13 16:34:36 【问题描述】:我尝试使用 Xamarin 在 android 上获取我的当前位置。我使用谷歌地图和以下代码:
using System;
using System.ComponentModel;
using System.Threading.Tasks;
using Xamarin.Essentials;
using Xamarin.Forms;
using Xamarin.Forms.Maps;
namespace WorldHerp
[DesignTimeVisible(false)]
public partial class MainPage : ContentPage
private double _latitude = 0.0;
private double _longitude = 0.0;
public MainPage()
InitializeComponent();
Task.Run(async () => await GetCurrentLocationAsync(); );
MapView.MoveToRegion(MapSpan.FromCenterAndRadius(new Position(_latitude, _longitude), Distance.FromKilometers(1)).WithZoom(20));
private async Task GetCurrentLocationAsync()
try
var location = await Geolocation.GetLocationAsync();
if (location != null)
_latitude = location.Latitude;
_longitude = location.Longitude;
catch (FeatureNotSupportedException fnsEx)
await DisplayAlert("Faild", fnsEx.Message, "OK");
catch (PermissionException pEx)
await DisplayAlert("Faild", pEx.Message, "OK");
catch (Exception ex)
await DisplayAlert("Faild", ex.Message, "OK");
他们只是为我的 _latitude/_longitude 变量返回 0。在我的 try 上进行调试,就好像他从不进去,但没有告诉我任何错误。
你有什么想法吗?
提前致谢
【问题讨论】:
问题是 Task.Run 正在异步运行,因此您无需等待获取位置。删除异步。 但是,这条线是异步的,我显然有异步方法: var location = await Geolocation.GetLocationAsync(); 它不会等待。异步创建一个单独的进程,然后立即转到 MoveToRegion。 但 GetLocationAsync 想要“等待”。你是怎么写代码的? 然后使用 GetCurrentLocation() 代替 GetCurrentLocationAsync() 【参考方案1】:您需要有一个异步非空方法来等待结果。
>
using System;
using System.ComponentModel;
using System.Threading.Tasks;
using Xamarin.Essentials;
using Xamarin.Forms;
using Xamarin.Forms.Maps;
namespace WorldHerp
[DesignTimeVisible(false)]
public partial class MainPage : ContentPage
public MainPage()
InitializeComponent();
protected async override void OnAppearing()
var position = await GetCurrentLocationAsync();
MapView.MoveToRegion(MapSpan.FromCenterAndRadius((position != null ?
position :
new Position(0.0, 0.0)),
Distance.FromKilometers(1)).WithZoom(20));
base.OnAppearing();
private async Task<Xamarin.Essentials.Location> GetCurrentLocationAsync()
try
return await Geolocation.GetLocationAsync();
catch (FeatureNotSupportedException fnsEx)
await DisplayAlert("Faild", fnsEx.Message, "OK");
catch (PermissionException pEx)
await DisplayAlert("Faild", pEx.Message, "OK");
catch (Exception ex)
await DisplayAlert("Faild", ex.Message, "OK");
【讨论】:
以上是关于使用 Xamarin 返回 0 获取当前 gps 位置的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Xamarin 在 Android 中同步获取 GPS 位置更新?