ImageView加载图片 路径没问题,图片不显示

先说一下如何获得本地图片的路径。

 

//点击图片事件
ib.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                getImageFromAlbum();
            }
        });

//调用本地图片库
    protected void getImageFromAlbum() {
        Intent i = new Intent(
                Intent.ACTION_PICK,
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(i, 2);
    }

    //获取本地图片路径并加载图片
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (requestCode == 2 && resultCode == RESULT_OK) {
            Uri u = data.getData();
            ContentResolver cr = AddActivity.this.getContentResolver();
            try {
                Bitmap bmp = BitmapFactory.decodeStream(cr.openInputStream(u));
                ib.setImageBitmap(bmp);
                String[] filePathColumn = { MediaStore.Images.Media.DATA };
                Cursor cursor = context.getContentResolver().query(u,
                        filePathColumn, null, null, null);
                cursor.moveToFirst();
                int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                //Path就是图片在储存卡所在的位置
                path = cursor.getString(columnIndex);

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

 

ImageView通过加载路径显示图片。

 

 

 Bitmap bmp= BitmapFactory.decodeFile(path);
        ib.setImageBitmap(bmp);


当然还要在AndroidManifest.xml文件中加入权限。

 

 




但是即使是这样,ImageView仍然无法显示图片,可是路径是对的啊,权限也已经加上了啊。

 

AS会显示这个错误:

E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/Download/timg (2).jpg (Permission denied)

提示的错误就是没有加载这个图片的权限。

可是刚刚不是已经在AndroidManifest.xml这个文件中加入了吗?

通过一番调查发现,原来android6.0之后不仅需要在Mainfest里面添加权限,还需要添加运行时权限。

这样的话就得在程序中加入如下代码:

 

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add);
        //允许开启访问本地文件权限
        requestWritePermission();
        init();
        OnClick();
    }

  private void requestWritePermission(){
        if (ActivityCompat.checkSelfPermission(AddActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(AddActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
        }
    }


这样的话在运行程序时,如果加载图片,它会有如下提示:

 

 

就是问你这个程序能否访问你的设备,此时点击ALLOW,就会显示图片了。

你可能感兴趣的:(java)