权限READ_EXTERNAL_STORAGE始终被拒绝

时间:2016-04-01 02:30:00

标签: android android-studio android-permissions android-6.0-marshmallow permission-denied

我尝试使用Android 6.0请求运行时权限。 这是我的代码:

private void enablePermission() {
    String[] PERMISSIONS = { Manifest.permission.READ_EXTERNAL_STORAGE};

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


public static boolean hasPermissions(Context context, String... permissions) {

    for (String permission : permissions) {
        if (ContextCompat.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 (grantResults.length > 0 && grantResults[0] ==
                    PackageManager.PERMISSION_GRANTED) {
                Log.d("Permission", "Granted");
            } else {
                Log.d("Permission", "Denied");
            }
    }
}

它总是告诉我"权限被拒绝"在onRequestPermissionsResult。我用ACCESS_FINE_LOCATION尝试了这段代码,但它确实有效。

2 个答案:

答案 0 :(得分:3)

尝试在您的权限上添加android包。像这样的东西(这是用于写外部存储):

public  boolean isStoragePermissionGranted() {
    if (Build.VERSION.SDK_INT >= 23) {
        if (checkSelfPermission(android.Manifest.permission. READ_EXTERNAL_STORAGE)
                == PackageManager.PERMISSION_GRANTED) {
            Log.v(TAG,"Permission is granted");
            return true;
        } else {

            Log.v(TAG,"Permission is revoked");
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission. READ_EXTERNAL_STORAGE}, 1);
            return false;
        }
    }
    else { //permission is automatically granted on sdk<23 upon installation
        Log.v(TAG,"Permission is granted");
        return true;
    }


}

对于回调:

 @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(grantResults[0]== PackageManager.PERMISSION_GRANTED){
            Log.v(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]);
            //resume tasks needing this permission
        }
    }

您可以参考此SO answer了解详情。

答案 1 :(得分:0)

我通过在 Genymotion 中重启我的虚拟设备解决了我的问题。

相关问题