Xamarin.Forms android检查用户是否点击了“拒绝”和“不再询问”

b1uwtaje  于 2022-12-07  发布在  Android
关注(0)|答案(2)|浏览(264)

在我的xamarin.forms应用程序中。我使用xamarin.Essentials来检查和请求权限。我可以在android中检查权限是否被授予。我面临的问题是,当用户点击“拒绝并不再询问”时,状态仍然显示Denied。我们如何知道用户是否选择了Deny and Dont ask,以便我可以根据它显示警告消息。任何帮助都是感激的。

8cdiaqws

8cdiaqws1#

对于Xamarin.Forms中的检查和请求权限,您也可以使用nuget的Permission.Plugin插件。
选项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
            }

        }
yiytaume

yiytaume2#

Xamarin.Essentials提供了一个方法来检测用户是否点击了“不再询问”。你可以通过调用ShouldShowRationale来检查是否应该显示对话框:

var canAskAgain = Xamarin.Essentials.Permissions.ShouldShowRationale<Permission_Type>();
var didCheckDontAskAgain = !canAskAgain;

如果为true,则表示用户没有单击“拒绝并不再询问”。
此外,请注意,在Android 12(可能是11,不确定)上,如果您多次点击“拒绝”,Android会认为您的意思是“不再询问”。用户可能永远不会明确选中该选项,但Android可能会推断出它。

相关问题