Xamarin - 地理位置不起作用.但是为什么



我只是想开发一个小应用程序,这给了我目前的职位。所以我找到了我输入到代码中的这个插件。现在,我得到了要编译的所有内容 - 应用程序开始,但随后,没有警告结束。没有崩溃,什么都没有。甚至Xamarin也没有显示出任何崩溃的迹象。你们能帮帮我吗?我什么都没试过,我都没主意... ;)再次感谢!

protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Main);
            //Initialize buttons:
            Button StartButton = FindViewById<Button>(Resource.Id.startbutton);
            TextView txtTestGps = FindViewById<TextView>(Resource.Id.GpsTest);
            ShowGpsCoordinates(StartButton, txtTestGps);
        }
        private void ShowGpsCoordinates(Button StartButton, TextView txtTestGps) 
        {
           Task<double> xy = GiveGpsLocation();
           double xyOut = xy.Result; 
            StartButton.Click += (sender, e) =>
            {
                txtTestGps.Text = xyOut.ToString();   
            };
        }
        private async Task<double> GiveGpsLocation()
        {
            double DoubleWithCoordinates = 0.0;
            var locator = CrossGeolocator.Current;
            locator.DesiredAccuracy = 50;
            var position =  await locator.GetPositionAsync(10000);
            // Console.WriteLine("Position Status: {0}", position.Timestamp);
            // Console.WriteLine("Position Latitude: {0}", position.Latitude);
            // Console.WriteLine("Position Longitude: {0}", position.Longitude);
            DoubleWithCoordinates = position.Latitude; 
            return DoubleWithCoordinates;  
        }
    }

由于您没有等待对异步方法的所有调用,因此异常可能会被吞噬,从而隐藏崩溃的原因。

也许尝试以下方法,看看是否可以得到一个告诉您一些事情的异常:

protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Main);
            //Initialize buttons:
            Button StartButton = FindViewById<Button>(Resource.Id.startbutton);
            TextView txtTestGps = FindViewById<TextView>(Resource.Id.GpsTest);
            Task.Run(async () => {
                await ShowGpsCoordinates(StartButton, txtTestGps);
            }
        }
        private async Task ShowGpsCoordinates(Button StartButton, TextView txtTestGps) 
        {
           double xyOut = await GiveGpsLocation();

            StartButton.Click += (sender, e) =>
            {
                txtTestGps.Text = xyOut.ToString();   
            };
        }
        private async Task<double> GiveGpsLocation()
        {
            double DoubleWithCoordinates = 0.0;
            var locator = CrossGeolocator.Current;
            locator.DesiredAccuracy = 50;
            var position =  await locator.GetPositionAsync(10000);
            // Console.WriteLine("Position Status: {0}", position.Timestamp);
            // Console.WriteLine("Position Latitude: {0}", position.Latitude);
            // Console.WriteLine("Position Longitude: {0}", position.Longitude);
            DoubleWithCoordinates = position.Latitude; 
            return DoubleWithCoordinates;  
        }
    }

最新更新