问题描述
我正在尝试制作一个按钮,从当前位置获取坐标,从 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);
}