Android 安卓| Can';无法从图库中获取图像

Android 安卓| Can';无法从图库中获取图像,android,image,gallery,Android,Image,Gallery,我想从画廊得到一张照片,但我没有得到。我刚刚得到一个错误: 无法解码流:java.io.FileNotFoundException:/storage/emulated/0/DCIM/Screenshots/Screenshot\u 20160715-233221.png:打开失败:EACCES(权限被拒绝) 我有这个密码: Intent i = new Intent(PostCreateActivity.this, MainActivity.class); startA

我想从画廊得到一张照片,但我没有得到。我刚刚得到一个错误:

无法解码流:java.io.FileNotFoundException:/storage/emulated/0/DCIM/Screenshots/Screenshot\u 20160715-233221.png:打开失败:EACCES(权限被拒绝)

我有这个密码:

 Intent i = new Intent(PostCreateActivity.this, MainActivity.class);
            startActivity(i);
            overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right);
这是:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
    super.onActivityResult(requestCode, resultCode, data);
    try{
        if(requestCode == RESULT_LOAD_IMG && resultCode == RESULT_OK && null != data){
            Uri selectedImage = data.getData();
            String[] filePathColumn = {MediaStore.Images.Media.DATA};

            Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            imgDecodableString = cursor.getString(columnIndex);
            cursor.close();
            ImageView imgView = (ImageView) findViewById(R.id.imgView);
            // Set the Image in ImageView after decoding the String
            imgView.setImageBitmap(BitmapFactory
                    .decodeFile(imgDecodableString));

        } else {
            Toast.makeText(this, "You haven't picked Image",
                    Toast.LENGTH_LONG).show();
        }

    }catch(Exception e){
        Toast.makeText(this, "Something went wrong!", Toast.LENGTH_SHORT).show();
    }
}
以及:



但我一直在犯这个错误。我能做什么?

如果您正在使用android 6.0或更高版本,您必须在运行时请求权限:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //......
    //Check and ask for permissions in version Android API 23 and above.
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        checkPermissions();
    }
    //.....

}


private void checkPermissions(){

    if (ContextCompat.checkSelfPermission(this,
                    Manifest.permission.READ_EXTERNAL_STORAGE)
                    != PackageManager.PERMISSION_GRANTED||
            ContextCompat.checkSelfPermission(this,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    != PackageManager.PERMISSION_GRANTED) {

        ActivityCompat.requestPermissions(this,
                new String[]{
                        Manifest.permission.READ_EXTERNAL_STORAGE,
                        Manifest.permission.WRITE_EXTERNAL_STORAGE
                        },
                1052);

    }

}

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

    switch (requestCode) {
        case 1052: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED
                    && grantResults[1] == PackageManager.PERMISSION_GRANTED {

                // permission was granted.

            } else {


                // Permission denied - Show a message to inform the user that this app only works
                // with these permissions granted

            }
            return;
        }

    }
}

你在测试什么android版本?
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //......
    //Check and ask for permissions in version Android API 23 and above.
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        checkPermissions();
    }
    //.....

}


private void checkPermissions(){

    if (ContextCompat.checkSelfPermission(this,
                    Manifest.permission.READ_EXTERNAL_STORAGE)
                    != PackageManager.PERMISSION_GRANTED||
            ContextCompat.checkSelfPermission(this,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    != PackageManager.PERMISSION_GRANTED) {

        ActivityCompat.requestPermissions(this,
                new String[]{
                        Manifest.permission.READ_EXTERNAL_STORAGE,
                        Manifest.permission.WRITE_EXTERNAL_STORAGE
                        },
                1052);

    }

}

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

    switch (requestCode) {
        case 1052: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED
                    && grantResults[1] == PackageManager.PERMISSION_GRANTED {

                // permission was granted.

            } else {


                // Permission denied - Show a message to inform the user that this app only works
                // with these permissions granted

            }
            return;
        }

    }
}