Xamarin.forms 如何在用户单击don';别再问了
大家好,我制作了一个xamarin.forms应用程序。我需要请求用户允许应用程序使用他的位置。这是我的代码:Xamarin.forms 如何在用户单击don';别再问了,xamarin.forms,permissions,geolocation,Xamarin.forms,Permissions,Geolocation,大家好,我制作了一个xamarin.forms应用程序。我需要请求用户允许应用程序使用他的位置。这是我的代码: var location = await Geolocation.GetLastKnownLocationAsync(); if (location == null) { location = await Geolocation.GetLocationAsync(new
var location = await Geolocation.GetLastKnownLocationAsync();
if (location == null)
{
location = await Geolocation.GetLocationAsync(new GeolocationRequest
{
DesiredAccuracy = GeolocationAccuracy.Medium,
Timeout = TimeSpan.FromSeconds(30)
}); ;
}
if (location == null)
LabelLocation.Text = " NO GPS LOCATION";
else
LabelLocation.Text = $"{location.Latitude} {location.Longitude}";
}
catch (FeatureNotSupportedException fnsEx)
{
// Handle not supported on device exception
await Application.Current.MainPage.Navigation.PushAsync(new MainMenu());
}
catch (FeatureNotEnabledException fneEx)
{
// Handle not enabled on device exception
await Application.Current.MainPage.Navigation.PushAsync(new MainMenu());
}
catch (PermissionException pEx)
{
// Handle permission exception
await Application.Current.MainPage.Navigation.PushAsync(new MainMenu());
}
catch (Exception ex)
{
// Unable to get location
await Application.Current.MainPage.Navigation.PushAsync(new MainMenu());
}
当用户再次单击“永不显示”时,每次打开页面时,它都会进入
PermissionException
,这是正常的。但是我想再次显示权限对话框,因为没有位置无法显示数据。有可能做到这一点吗?简短的回答是,不,你不能。正如您在请求权限中所看到的(当用户拒绝权限并检查从现在起不应显示任何提示时):
向用户解释该功能不可用,因为该功能需要用户拒绝的权限。同时,尊重用户的决定。不要为了说服用户改变他们的决定而链接到系统设置
最佳做法是在请求许可之前向用户详细解释。如果用户仍决定拒绝您此权限,则显示一条消息,说明此特定逻辑根本无法工作。这与最佳实践背道而驰,但如果您愿意,可以将用户重定向到设置
,用户可以在那里启用权限。然而,我强烈建议你不要这样做
一个重要的旁注,同样来自:
如果ContextCompat.checkSelfPermission()
方法返回PERMISSION\u DENIED
,则调用应显示requestpermissionrational()
。如果此方法返回true
,则向用户显示教育用户界面。在此UI中,描述用户希望启用的功能需要特定权限的原因
此外,请使用Xamarin.Essentials
进行。那里的一切都有很好的记录
另外,我强烈建议您阅读官方Android团队提供的其他有用实践。我使用Essential Geologication哦,对不起,太糟糕了。那么一切都好了。只需在使用前检查权限,因为
权限
API更灵活,您可以根据用户的选择随时调整流量/UI。