非活动类授予或拒绝检查M权限

时间:2017-05-17 11:06:44

标签: android permissions

在我的应用程序中,我想执行非活动类中存在的特定功能,但在执行此功能之前,应检查是否授予某些权限。我在运行时处理请求权限,但我如何检查用户是否拒绝此权限并检查从未再次显示。

在我的情况下,我检查是否使用

授予了权限
if(ContextCompat.checkSelfPermission(context,Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED)

但是当我从设置中设置权限Always deny并尝试使用其他方式检查时,我也会检查错误

if (ActivityCompat.shouldShowRequestPermissionRationale(context, Manifest.permission.READ_CONTACTS))

但在拒绝许可时也给我错误,并且检查再也没有显示。

那么检查用户是否拒绝任何权限以及检查是否再次显示的最佳方式是什么from run time permission dialog or deny it from application settings

1 个答案:

答案 0 :(得分:1)

这是特别检查权限的代码。

 private void requestP() {

// Write all permissions in PERMISSIONS array

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

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

}

public static boolean hasPermissions(Context context, String... permissions) {
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
        for (String permission : permissions) {
            if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
    }
    return true;
}

@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) {

                    // Read Phone State Permission allowed
                } else {
                   // Read Phone State Permission denied 
                }

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

                   // Write External Storage Permission allowed
                } else {
                   // Write External Storage Permission denied
                }


            } else {

                // All Permissions denied
            }
            // runAfterPermissionGranted

            return;
        }

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

您可以在onRequestPermissionResult()中存储所有权限的标志,并随时检查该标志。