【问题标题】:"Never ask again" checkbox is never shown in Android runtime permissionAndroid运行时权限中永远不会显示“不再询问”复选框
【发布时间】:2016-03-19 03:40:24
【问题描述】:

我的手机是 Nexus6,23 级。

我的应用中的目标 sdk 版本是 22。

我在支持包中通过 Fragment 在 BaseFragment 中实现棉花糖运行时权限兼容功能。

根据sdk文档,在第一次被拒绝后,“不再询问”复选框将显示在权限对话框中。同时, shouldShowRequestPermissionRationale() 将返回 true。

但是,无论我拒绝多少次权限,我都无法在权限对话框中看到“不再询问”复选框,并且 shouldShowRequestPermissionRationale 始终返回 false。

有什么问题吗?

【问题讨论】:

    标签: android android-6.0-marshmallow


    【解决方案1】:

    你是否在被拒绝后再次调用 requestPermissions() ? 当您在第一次被拒绝后再次调用 requestPermissions() 时,将显示“不再询问”复选框。

    像这样:

    private void checkPermission(){
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if(checkSelfPermission(Manifest.permission.GET_ACCOUNTS) != PackageManager.PERMISSION_GRANTED){
                requestPermissions(new String[]{Manifest.permission.GET_ACCOUNTS}, PERMISSION_REQUEST);
            }
        }
    
    }
    
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode){
            case PERMISSION_REQUEST:
                checkPermission();
                break;
        }
    }
    

    【讨论】:

      【解决方案2】:

      有什么问题吗?

      是的,就在这里:“我的应用程序中的目标 sdk 版本是 22。”

      您的选择是:

      1. 使用23或更高的targetSdkVersion,并实现运行时权限代码(checkSelfPermission()requestPermissions()等)

      2. 使用 22 或更低的 targetSdkVersion,并且实现运行时权限代码(checkSelfPermission()requestPermissions() 等)

      您组合的预期结果(targetSdkVersion of 22 并尝试使用运行时权限代码)是未记录的 AFAIK。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-26
        • 2020-05-29
        • 2016-02-10
        • 2018-01-03
        • 2015-12-27
        • 1970-01-01
        • 2017-03-31
        • 2018-12-15
        相关资源
        最近更新 更多