繁体   English   中英

我的应用程序第一次不询问棉花糖的运行时权限吗?

[英]My app Does not ask at the first time for the runtime permission for the marshmallow?

我为送餐制作了一个应用程序。 在我的应用程序中,当用户使用Android手机版本的棉花糖时,我的应用程序不会在第一时间要求读取短信的许可。 但是当用户下次打开应用程序时,我的应用程序会请求许可。 我不知道是什么问题。 我希望当用户第一次打开应用程序时,应该询问权限,而不是第二次。

这是我请求权限的方法,我在Activity的onCreate()方法中调用此方法:

 private void permissionForMarshMallow() {

        int permissionCheck = ContextCompat.checkSelfPermission(LoginActivity.this,
                Manifest.permission.READ_SMS);

        if (ContextCompat.checkSelfPermission(LoginActivity.this,
                Manifest.permission.READ_SMS)
                != PackageManager.PERMISSION_GRANTED) {


            if (ActivityCompat.shouldShowRequestPermissionRationale(LoginActivity.this,
                    Manifest.permission.READ_SMS)) {

                Log.e("permission...granted", "permission granted............");


            } else {



                ActivityCompat.requestPermissions(LoginActivity.this,
                        new String[]{Manifest.permission.READ_SMS},
                        REQUEST_CODE_ASK_SINGLE_PERMISSION);


            }
        }
    } 

这是重写方法onRequestPermissionsResult()

 @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {


        switch (requestCode) {

            case REQUEST_CODE_ASK_SINGLE_PERMISSION:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                } else {


                    // Toast.makeText(LoginActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show();
                }
                break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }


    }

谁能告诉我如何使应用程序在第一次而不是第二次请求许可?

您的代码中存在逻辑缺陷。 这是您的代码运行方式:

  1. 检查我们是否有权限。
  2. 如果我们没有许可:
    • 我们应该征求许可吗?
      • 如果是,则记录“已授予权限”
      • 如果没有,则请求权限

因此,基本上,您是在不需要的时候请求许可。 在您应该请求许可的情况下,只需记录“已授予许可”,而不是请求许可。 您只需要稍微更改一下代码即可:

 private void permissionForMarshmallow() {

        int permissionCheck = ContextCompat.checkSelfPermission(LoginActivity.this, Manifest.permission.READ_SMS);

        if (ContextCompat.checkSelfPermission(LoginActivity.this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED) {

            ActivityCompat.requestPermissions(LoginActivity.this, new String[]{Manifest.permission.READ_SMS}, REQUEST_CODE_ASK_SINGLE_PERMISSION);

        }
        else {
            // user probably checked "never ask again" - we should not ask for permission.
        }
    }
} 

看起来像第一次启动时,ShowShowRequestPermissionRationale为true,您只需创建一个日志条目。 您已将其写入日志中,但在这种情况下,尚未授予该权限。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM