问:Android Dev - 多权限的权限检查/请求 - 这是正确的吗?

时间:2016-06-04 19:28:46

标签: java android android-studio permissions android-permissions

大家好,谢谢你们帮我解决问题..

我第一次尝试在应用程序中实现新的Permissions请求,所以我只需要一些帮助..

基本上,我的第1步涉及检查是否已经授予了权限,然后在下一步中请求它(如果尚未授权)。
但我需要检查并确保所有权限我需要的权限被授予,而不仅仅是一个..
所以我所拥有的是检查单一权限的内容:

private void checkPermission() {

    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
            == PackageManager.PERMISSION_GRANTED) {

        // Permission already available, continue to Method "finishPermissionCheck"
        finishPermissionCheck();

    } else {
        // Permission needs to be requested, continue to Method "requestPermission"
        requestPermission();
    }
}

好的,这只适用于一个权限,但我需要检查 MULTIPLE 权限(如果需要,请求多个权限)..我尝试使用&&包括其余的权限,但无济于事。我也尝试创建一个多个权限的字符串,如下所示..

这是我的尝试看起来.. < / strong>

首先我在范围内创建一个多个权限的字符串(在这种情况下,我只是尝试2个权限):

private static final String[] requiredPermissions = {
        Manifest.permission.ACCESS_FINE_LOCATION,
        Manifest.permission.RECEIVE_BOOT_COMPLETED
};

然后我将权限检查代码更改为如下所示:

private void checkPermission() {

    if (ActivityCompat.checkSelfPermission(this, String.valueOf(requiredPermissions))
            == PackageManager.PERMISSION_GRANTED) {

        // Permission already available, continue to Method "finishPermissionCheck"
        finishPermissionCheck();

    } else {
        // Permission needs to be requested, continue to Method "requestPermission"
        requestPermission();
    }
}

但是,我不确定这是否是正确的方法。

完成此任务的最佳方式是什么?

..是的主持人,我已经浏览了与此主题相关的其他帖子。

提前感谢您提供任何帮助!

2 个答案:

答案 0 :(得分:0)

在您的finishPermissionCheck();方法中调用以下代码 - &gt;

ActivityCompat.requestPermissions(SendMoneyByDetailsActivity.this, requiredPermissions , REQUEST_CODE);

答案 1 :(得分:0)

您好我最近遇到了同样的问题。我将分享我的实施。在我的情况下,我需要检查所有TWO权限,但它看起来可扩展到我。

MyPermissionHandler.java

// return true if all permissions are granted
public boolean getPermissions() {
    // if version is smaller, the permissions in the xml file are enough
    if(Build.VERSION.SDK_INT<Build.VERSION_CODES.M) {
        return true;
    }

    // create an array list with needed permissions if they are not granted already
    ArrayList<String> perms = new ArrayList<String>() {{
        if(!hasCameraPermission()) add(Manifest.permission.CAMERA);
        if(!hasWritePermission()) add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
    }};

    if(perms.size()>0) {
        ActivityCompat.requestPermissions(activity, perms.toArray(new String[0]), MainActivity.MY_PERMISSIONS_REQUEST_CAMERA);
        return false;
    } else {
        return true;
    }
}

private boolean hasCameraPermission() {
    return ContextCompat.checkSelfPermission(activity, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED;
}
private boolean hasWritePermission() {
    return ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
}

在MainActivity.java中

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

    // if at least one permission is denied, finish the activity
    for(int permission : grantResults) {
        if(permission != PackageManager.PERMISSION_GRANTED) {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("Error")
                    .setMessage("This application needs all permissions.")
                    .setCancelable(false)
                    .setNeutralButton("Ok", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            finish();
                        }
                    })
                    .show();

            return;
        }
    }

    // all permissions are granted
}

如果您需要添加更多权限,则只能更改MyPermissionHandler.java文件中的代码。希望这可以帮助! :)

顺便说一下,你可以在活动的onResume()方法中添加一些检查,以防用户最小化程序并进入设置以禁用,例如,相机权限。在他回到应用程序并且应用程序试图打开相机后,应用程序将崩溃。所以你必须小心。