在onRequestPermissionsResult grant中,当用户拒绝权限时,某些设备上的结果返回空 [英] In onRequestPermissionsResult grantResults on some device return empty when user decline the permission

查看:18
本文介绍了在onRequestPermissionsResult grant中,当用户拒绝权限时,某些设备上的结果返回空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在快照中:,在onRequestPermissionsResult中当用户拒绝权限时,某些设备上的结果返回空,而某些设备上的结果具有值PackageManager.PERMISSION_DENIED

我已经根据https://stackoverflow.com/a/31925748/2941375答案为运行时权限实现了标识用户已选择已接受拒绝拒绝且不再询问的解决方案。

根据我见过的许多文档,如果用户拒绝权限,则返回grantResults

我使用的代码else if (grantResults[0] == PackageManager.PERMISSION_DENIED),因此在else if部分引发Arrayindexoutofbound异常

当用户拒绝权限grantResults不是时,我测试了代码 适用于我的情况,但我已在交换矩阵控制台上看到 grantResults有许多崩溃,arrayindexoutofbound

 @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case PermissionManager.MY_PERMISSIONS_REQUEST_LOCATION_ACCESS: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    DefineLocationService.start(this);
                    startNextActivity(0);
                } else if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
                    boolean showRationale = ActivityCompat.shouldShowRequestPermissionRationale(this, permissions[0]);
                    if (!showRationale) {
                        // user also CHECKED "never ask again"
                        // you can either enable some fall back,
                        // disable features of your app
                        // or open another dialog explaining
                        // again the permission and directing to
                        // the app setting
                        startNextActivity(ARTIFICIAL_DELAY_MILLIS);
                    } else if (!PermissionManager.MY_REQUESTED_DIALOG) {
                        PermissionManager.checkLocationPermission(this);
                    } else {
                        startNextActivity(0);
                    }
                } else {
                    startNextActivity(ARTIFICIAL_DELAY_MILLIS);
                }


            }
        }
    }

谁能解释一下,当用户拒绝权限时,为什么有些设备返回grantResults为空,而有些设备返回grantResults有值和拒绝。

我测试了很多次,但grantResults我这边从来没有空过,但是控制台上有崩溃,这意味着在某些情况下它是空的,grantResults[0]抛出异常。

推荐答案

根据the documentation

注意:权限请求与用户的交互可能会中断。在这种情况下,您将收到应视为取消的空权限和结果数组。

如何处理取消完全由您决定(重新请求权限、将其视为拒绝等),因此只需确保在代码中说明这种情况。

这篇关于在onRequestPermissionsResult grant中,当用户拒绝权限时,某些设备上的结果返回空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆