使用 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 位置的主要内容,如果未能解决你的问题,请参考以下文章

从应用程序提示启用 gps 后如何刷新并获取当前位置?

如何使用 Xamarin 基于 Wifi 获取 GPS

如何使用 Xamarin 在 Android 中同步获取 GPS 位置更新?

如何在 Xamarin Forms 中获取设备的 GPS 位置?

获取2个GPS坐标xamarin之间的准确距离

Android 成功 使用GPS获取当前地理位置(解决getLastKnownLocation 返回 null)