【问题标题】:Android 7.0 Dont Show Multiple Permission RequestAndroid 7.0 不显示多个权限请求
【发布时间】:2017-05-05 11:29:04
【问题描述】:

我试图在 Android 7.0 上显示多个权限请求

此代码在 Android sdk 23 上运行没有问题。

SDK 24 显示一次请求,如果我触摸允许或拒绝按钮,此代码工作一次并且不显示其他请求。

代码在这里;

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

            if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {

                requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
            }

            if (checkSelfPermission(Manifest.permission.READ_SMS) == PackageManager.PERMISSION_DENIED) {

                requestPermissions(new String[]{Manifest.permission.READ_SMS}, 1);
            }

            if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_DENIED) {
                requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
            }

        }

【问题讨论】:

  • 而不是三个 requestPermissions() 调用,有 一个 requestPermissions() 调用,用于您需要的特定权限组合。我使用实用程序netPermissions() 方法来简化这一点,例如this sample activity

标签: java android android-permissions runtime-permissions


【解决方案1】:

试试这个

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

            String[] permissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_SMS, Manifest.permission.ACCESS_FINE_LOCATION};
            boolean flag = false;
            for (int i = 0; i < permissions.length; i++) {
                if (checkSelfPermission(permissions[i]) == PackageManager.PERMISSION_DENIED) {
                    flag = true;
                    break;
                }
            }

            if (flag) {
                requestPermissions(permissions, 1);
            }

        }

【讨论】:

  • 感谢您提供最佳解决方案!
【解决方案2】:

首先检查是否已授予权限,如果未授予,则使用以下代码请求权限。

String[] PERMISSIONS = {Manifest.permission.READ_PHONE_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE,
            Manifest.permission.READ_CALL_LOG, Manifest.permission.READ_CONTACTS,
            Manifest.permission.WRITE_CONTACTS};

    if (!hasPermissions(this, PERMISSIONS)) {
        ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
    }

授予权限后,您可以执行以下代码来检查是否授予或拒绝了特定权限

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

        case PERMISSION_ALL: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0) {

                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {


                } else {

                }

                if (grantResults[1] == PackageManager.PERMISSION_GRANTED) {


                } else {

                }

                if (grantResults[2] == PackageManager.PERMISSION_GRANTED) {


                } else {

                }

                if (grantResults[3] == PackageManager.PERMISSION_GRANTED) {


                } else {

                }

                if (grantResults[4] == PackageManager.PERMISSION_GRANTED) {


                } else {

                }


            } else {

                //All permission denied

            }
            runAfterPermissionGranted();

            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 2017-11-07
    • 2019-09-20
    • 2016-07-22
    • 1970-01-01
    • 2019-09-03
    相关资源
    最近更新 更多