由于android越来越注重安全性,导致在7.0之后对存取的权限也被回收,如果需要从相册读取或是存到相册中。
切不可直接创建文件,会报FileNotFound的错误。此时需要借助Provider来实现对路径的开放。如何实现在provider中开启自定义路径的访问权限,,见我上一篇博文关于拍照返回原图的。
正常用Intent开启相册之后,在onActivityResult方法中,可以拿到获取的照片的一个Uri(data.getData())。
重要的就在这一步,怎样把得到的uri显示在指定的imageview上,通常如果图片过大,肯定会出现OOM,这时我们要做的就是把这个Uri根据所要显示的控件大小进行压缩后转化为bitmap,显示在imageview上。
以下方法用于压缩
public static Bitmap getbitmap(Context context,ImageView img,Uri uri) {
//获取目标控件的大小
int targetW = img.getWidth();
int targetH = img.getHeight();
//设置参数
BitmapFactory.Options bm = new BitmapFactory.Options();
//设置injustDecodeBounds属性为true,可以做到只加载图片的大小,而不在内存为其分配空间
bm. inJustDecodeBounds = true;
BitmapFactory.decodeStream(context.getContentResolver().openInputStream(uri),null,bm);