Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Xamarin返回0获取当前gps位置_C#_Android_Xamarin_Geolocation_Gps - Fatal编程技术网

C# 使用Xamarin返回0获取当前gps位置

C# 使用Xamarin返回0获取当前gps位置,c#,android,xamarin,geolocation,gps,C#,Android,Xamarin,Geolocation,Gps,我试图通过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)] pu

我试图通过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。我试着调试一下{}就好像他从来没有进去过,但没有告诉我任何错误

你知道吗


感谢每一个advance

您需要一个异步非空方法来等待结果

>

使用系统;
使用系统组件模型;
使用System.Threading.Tasks;
使用Xamarin.Essentials;
使用Xamarin.Forms;
使用Xamarin.Forms.Maps;
命名空间WorldHerp
{
[设计时间可见(错误)]
公共部分类主页:ContentPage
{
公共主页()
{
初始化组件();
}
受保护的异步重写void OnAppearing()
{
var position=等待GetCurrentLocationAsync();
MapView.MoveToRegion(MapSpan.FromCenterAndRadius((位置!=null?
职位:
新位置(0.0,0.0)),
距离。从公里数(1)),使用缩放(20));
base.OnAppearing();
}
专用异步任务GetCurrentLocationAsync()
{
尝试
{
返回wait-Geolocation.GetLocationAsync();
}
捕获(功能不支持异常fnsEx)
{
等待显示警报(“失败”,fnsEx.Message,“OK”);
}
捕获(许可异常pEx)
{
等待显示警报(“故障”,pEx.信息,“正常”);
}
捕获(例外情况除外)
{
等待显示警报(“故障”,例如消息“正常”);
}
}
}
}

您需要一个异步非空方法来等待结果

>

使用系统;
使用系统组件模型;
使用System.Threading.Tasks;
使用Xamarin.Essentials;
使用Xamarin.Forms;
使用Xamarin.Forms.Maps;
命名空间WorldHerp
{
[设计时间可见(错误)]
公共部分类主页:ContentPage
{
公共主页()
{
初始化组件();
}
受保护的异步重写void OnAppearing()
{
var position=等待GetCurrentLocationAsync();
MapView.MoveToRegion(MapSpan.FromCenterAndRadius((位置!=null?
职位:
新位置(0.0,0.0)),
距离。从公里数(1)),使用缩放(20));
base.OnAppearing();
}
专用异步任务GetCurrentLocationAsync()
{
尝试
{
返回wait-Geolocation.GetLocationAsync();
}
捕获(功能不支持异常fnsEx)
{
等待显示警报(“失败”,fnsEx.Message,“OK”);
}
捕获(许可异常pEx)
{
等待显示警报(“故障”,pEx.信息,“正常”);
}
捕获(例外情况除外)
{
等待显示警报(“故障”,例如消息“正常”);
}
}
}
}

问题在于任务。Run正在异步运行,因此您永远不会等待获取位置。删除async。但是,这一行是异步的,我显然有异步方法:var location=await Geolocation.GetLocationAsync();它不会等待。异步创建一个单独的进程,然后立即转到MoveToRegion。但是GetLocationAsync希望“等待”。如何编写这样的代码?然后使用GetCurrentLocation()而不是GetCurrentLocationAsync()。问题在于任务。Run正在异步运行,因此您永远不会等待获取位置。删除async。但是,这一行是异步的,我显然有异步方法:var location=await Geolocation.GetLocationAsync();它不会等待。异步创建一个单独的进程,然后立即转到MoveToRegion。但是GetLocationAsync希望“等待”。如何编写这样的代码?然后使用GetCurrentLocation()而不是GetCurrentLocationAsync()
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");
            }
        }
    }
}