在我的xamarin.forms应用程序中。我使用xamarin.Essentials来检查和请求权限。我可以在android中检查权限是否被授予。我面临的问题是,当用户点击“拒绝并不再询问”时,状态仍然显示Denied。我们如何知道用户是否选择了Deny and Dont ask,以便我可以根据它显示警告消息。任何帮助都是感激的。
xamarin.Essentials
Denied
Deny and Dont ask
8cdiaqws1#
对于Xamarin.Forms中的检查和请求权限,您也可以使用nuget的Permission.Plugin插件。选项Deny and Don't ask again只会在你第二次拒绝请求时出现,但是,没有这样一个特定的状态来标记它。作为一种解决方法,我们可以定义一个自定义属性来保存拒绝的时间。
Deny and Don't ask again
int DenyCount = 0; private async void FabOnClick(object sender, EventArgs eventArgs) { var status = await CrossPermissions.Current.CheckPermissionStatusAsync<LocationPermission>(); if (status != PermissionStatus.Granted) { if (await CrossPermissions.Current.ShouldShowRequestPermissionRationaleAsync(Permission.Location)) { //await DisplayAlert("Need location", "Gunna need that location", "OK"); DenyCount++; if(DenyCount>=2) { //... } } status = await CrossPermissions.Current.RequestPermissionAsync<LocationPermission>(); } if (status == PermissionStatus.Granted) { //Query permission DenyCount = 0; // reset the value of DenyCount } else if (status == PermissionStatus.Restricted) { //location denied } }
yiytaume2#
Xamarin.Essentials提供了一个方法来检测用户是否点击了“不再询问”。你可以通过调用ShouldShowRationale来检查是否应该显示对话框:
ShouldShowRationale
var canAskAgain = Xamarin.Essentials.Permissions.ShouldShowRationale<Permission_Type>(); var didCheckDontAskAgain = !canAskAgain;
如果为true,则表示用户没有单击“拒绝并不再询问”。此外,请注意,在Android 12(可能是11,不确定)上,如果您多次点击“拒绝”,Android会认为您的意思是“不再询问”。用户可能永远不会明确选中该选项,但Android可能会推断出它。
2条答案
按热度按时间8cdiaqws1#
对于Xamarin.Forms中的检查和请求权限,您也可以使用nuget的Permission.Plugin插件。
选项
Deny and Don't ask again
只会在你第二次拒绝请求时出现,但是,没有这样一个特定的状态来标记它。作为一种解决方法,我们可以定义一个自定义属性来保存拒绝的时间。
yiytaume2#
Xamarin.Essentials提供了一个方法来检测用户是否点击了“不再询问”。你可以通过调用
ShouldShowRationale
来检查是否应该显示对话框:如果为true,则表示用户没有单击“拒绝并不再询问”。
此外,请注意,在Android 12(可能是11,不确定)上,如果您多次点击“拒绝”,Android会认为您的意思是“不再询问”。用户可能永远不会明确选中该选项,但Android可能会推断出它。