gpt4 book ai didi

Android M 权限 : Confused on the usage of shouldShowRequestPermissionRationale() function

转载 作者:IT老高 更新时间:2023-10-28 12:58:49 26 4
gpt4 key购买 nike

我正在阅读有关 Android M 中新权限模型的官方文档。它讨论了 shouldShowRequestPermissionRationale() 函数,如果应用程序请求此函数,该函数将返回 true之前的权限,并且用户拒绝了该请求。如果用户过去拒绝了权限请求并选择了不再询问选项,则此方法返回 false

但是我们如何区分以下两种情况呢?

案例1:应用没有权限,用户之前没有被请求权限。在这种情况下,shouldShowRequestPermissionRationale() 将返回 false,因为这是我们第一次询问用户。

情况 2:用户拒绝了权限并选择了“不再询问”,在这种情况下 shouldShowRequestPermissionRationale() 也会返回 false。

我想在案例 2 中将用户发送到应用程序的设置页面。我该如何区分这两种情况?

最佳答案

M Preview 1 之后,如果对话框第一次显示,则没有Never ask again复选框。

如果用户拒绝了权限请求,Never ask again 复选框会出现在权限对话框中第二次请求权限。

所以逻辑应该是这样的:

  1. 请求权限:

    if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(context, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE);
    } else {
    //Do the stuff that requires permission...
    }
  2. onRequestPermissionsResult中检查权限是被拒绝还是被授予。

    如果之前该权限被拒绝,这一次在权限对话框中会有一个不再询问复选框。

    调用 shouldShowRequestPermissionRationale 以查看用户是否选中了不再询问shouldShowRequestPermissionRationale 方法仅在用户选择不再询问或设备策略禁止应用拥有该权限时返回 false:

    if (grantResults.length > 0){
    if(grantResults[0] == PackageManager.PERMISSION_GRANTED) {
    //Do the stuff that requires permission...
    }else if (grantResults[0] == PackageManager.PERMISSION_DENIED){
    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(context, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
    //Show permission explanation dialog...
    }else{
    //Never ask again selected, or device policy prohibits the app from having that permission.
    //So, disable that feature, or fall back to another situation...
    }
    }
    }

因此,您不必跟踪用户是否选中了不再询问

关于Android M 权限 : Confused on the usage of shouldShowRequestPermissionRationale() function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32347532/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com