当允许使用 GPS 时,是否有办法修复,必须在 Xamarin iOS 上再次按下代码执行按钮

问题描述

我正在尝试制作一个按钮,从当前位置获取坐标,从 API 调用城市并在搜索栏中返回城市名称

在按下按钮的那一刻,它首先请求 GPS 许可,但一旦启用它,它就会停止执行逻辑。

获得许可后,您需要再次按相同的按钮才能更改搜索引擎中的城市名称。有没有办法允许用户使用他的位置来执行代码而无需第二次按下。

代码

        async void OnGetGPSLocation(System.Object sender,System.EventArgs e)
        {
        var status = await Permissions.CheckStatusAsync<Permissions.LocationWhenInUse>();
     
        if (status == PermissionStatus.Denied && status == PermissionStatus.disabled)
        {
            _ = await Permissions.RequestAsync<Permissions.LocationWhenInUse>();
           
        }
        else
        {
            try
            {
                var location = await Geolocation.GetLastKNownLocationAsync();

                if (location != null)
                {
                    WeatherForecast16DaysCoordinates weatherBindingData = await _restServiceForecastCoords.GetCity(GenerateRequestUriForecast3(ConstantsForecast16DaysCoords.WeatherbitEndPoint3,location));
                    var cityCoord = weatherBindingData.CityName;
                    _cityEntry.Text = cityCoord;
                }
            }
            catch (FeatureNotSupportedException fnsEx)
            {
                await displayAlert("Alert" + Environment.NewLine + "Something is wrong.","You have some errors: " + Environment.NewLine + fnsEx.ToString(),"OK");
            }
            catch (FeatureNotEnabledException fneEx)
            {
                await displayAlert("Alert" + Environment.NewLine + "Something is wrong.","You have some errors: " + Environment.NewLine + fneEx.ToString(),"OK");
            }
            catch (PermissionException pEx)
            {
                await displayAlert("Alert" + Environment.NewLine + "Something is wrong.","You have some errors: " + Environment.NewLine + pEx.ToString(),"OK");
            }
            catch (Exception ex)
            {
                await displayAlert("Alert" + Environment.NewLine + "Something is wrong.","You have some errors: " + Environment.NewLine + ex.ToString(),"OK");
            }
        }
    }

我的 GPS 的第二个问题是 GPS 与用户设备的连接断开。如何直接转发到设置激活。

解决方法

当 GPS 与用户的设备断开连接时。如何直接转发到设置激活。

如果您想在用户拒绝时再次允许该权限,您可以检查以下代码。

var bundleId = NSBundle.MainBundle.BundleIdentifier;
var url = new NSUrl(UIApplication.OpenSettingsUrlString + "&path=LOCATION/" + bundleId);

if(UIApplication.SharedApplication.CanOpenUrl(url))
{
    UIApplication.SharedApplication.OpenUrl(url);
}