Android开发获取相册图片的方式网上有很多种,这里说一个Android4.4后的方法,因为版本越高,一些老的api就会被弃用,新的api和老的api不兼容,导致出现很多问题。

比如:managedQuery()现在已经被getContentResolver().query()替代了,不过它们的参数都是一样的

再比如Android4.4后Intent(Intent.ACTION_GET_CONTENT);和Intent(Intent.ACTION_OPEN_DOCUMENT);两个方法所得到的图片的uri是不一样的,用老的方法导致在Android4.4系统获取不到图片。

    private ImageView imgShow = null;
private TextView imgPath = null;
private final int IMAGE_CODE = 0;
Uri bitmapUri = null;
private final String IMAGE_TYPE = "image/*";

imgShow是一个用来显示图片的imageView控件,imgPath是用来显示获取到图片的路径的TextView控件,都要在onCreate()函数里连接到对应的控件Id,IMAGE_CODE是自定义的一个参数,可以为其它数值。

private void selectImage() {
// TODO Auto-generated method stub
boolean isKitKatO = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
Intent getAlbum;
if (isKitKatO) {
getAlbum = new Intent(Intent.ACTION_OPEN_DOCUMENT);
} else {
getAlbum = new Intent(Intent.ACTION_GET_CONTENT);
}
getAlbum.setType(IMAGE_TYPE); startActivityForResult(getAlbum, IMAGE_CODE); } protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode != RESULT_OK) { Log.e("TAG->onresult", "ActivityResult resultCode error"); return; }
Bitmap bm = null;
ContentResolver resolver = getContentResolver();
if (requestCode == IMAGE_CODE) {
try { Uri originalUri = data.getData(); //获得图片的uri
bitmapUri = originalUri;
isSelectPic = true;
bm = MediaStore.Images.Media.getBitmap(resolver, originalUri);
//显得到bitmap图片
imgShow.setImageBitmap(bm);
String[] proj = {MediaStore.Images.Media.DATA}; Cursor cursor = getContentResolver().query(originalUri, proj, null, null, null);
if(cursor.moveToFirst()) {
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
String path = cursor.getString(column_index);
imgPath.setText(path);
}
cursor.close();
} catch (IOException e) {
Log.e("TAG-->Error", e.toString());
} } }

这里用

getContentResolver().query()替代老的managedQuery(),还在一开始判断编译的sdk版本是否为Android4.4以后的版本
boolean isKitKatO = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
是的话就用新的方法,否则用老的方法,在button控件里调用selectImage()函数就能从图片库获取图片。
要想通过uil得到相应的bitmap图片,可以通过以下方法:
private Bitmap decodeUriAsBitmap(Uri uri) {
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
}
return bitmap;
}
传入获取到的图片的uri就能得到相应的bitmap图片

android开发之——获取相册图片和路径的更多相关文章

  1. Android开发之获取相册照片和获取拍照照片

    在Android的开发过程中,我们可能会读取手机里面的照片或者通过相机拍摄获取照片,这是两种常用的获取图片的方式,在做项目过程中也会经常遇到,下面来介绍一下这两种获取方式.. 1.从本地相册获取照片: ...

  2. Android开发之获取相册照片和获取拍照照片二

    转至 http://blog.csdn.net/beyond0525/article/details/8940840 上一篇文章中讲解了照相机获取照片的时候遇到了可能取得的uri为null的状态,并给 ...

  3. android开发如何获取res/raw和assets文件夹的路径

    ---恢复内容开始--- android开发如何获取res/raw和assets文件夹的路径,主要分为两种情况: 1.如果你只是拷贝动作,那么你只需要得到res/raw和assets文件输入流就可以, ...

  4. Android开发之获取xml文件的输入流对象

    介绍两种Android开发中获取xml文件的输入流对象 第一种:通过assets目录获取 1.首先是在Project下app/src/main目录下创建一个assets文件夹,将需要获取的xml文件放 ...

  5. Swift中获取相册图片与保存到相册

    关于这个网上目前位置记录的资料比较少,记录一下这个坑 获取相册图片 1: var iPC = UIImagePickerController() 2: iPC.sourceType = UIImage ...

  6. iOS-使用ALAssetsLibrary获取相册图片视频

    用ALAssetsLibrary获取相册图片视频 ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library enumera ...

  7. Android开发16——获取网络资源之基础应用

    一.项目背景在Android开发中有一项非常广泛的应用:Android项目获取另一个web项目的资源或者返回的数据.本博文介绍了获取另一个web项目的资源.有一个web项目,在其WebRoot文件夹下 ...

  8. android 通过uri获取bitmap图片并压缩

    很多人在调用图库选择图片时会在onActivityResult中用Media.getBitmap来获取返回的图片,如下: Uri mImageCaptureUri = data.getData(); ...

  9. Android开发笔记——以Volley图片加载、缓存、请求及展示为例理解Volley架构设计

    Volley是由Google开源的.用于Android平台上的网络通信库.Volley通过优化Android的网络请求流程,形成了以Request-RequestQueue-Response为主线的网 ...

随机推荐

  1. ruby -- 进阶学习(五)使用Ckeditor插件上传中文图片

    基于rails4.0环境 当使用Ckeditor上传中文命名图片时报错,解决方法是对图片进行重命名 在Ckeditor插件的安装目录下找到controllers/.../application.rb ...

  2. Git 分支合并

    理解核心 Git最初只有一个分支,所有后续分支都是直接或间接的从这个分支切出来的. 在任意两个分支上,向前追溯提交记录,都能找到一个最近的提交同时属于这两个分支,这个提交就是两个分支的分叉节点 分支合 ...

  3. 两分钟了解REACTIVEX

    可能在之前,你就已经看过这篇响应式编程的入门.什么?太长?好吧,这都没关系,Rx并不难,你甚至可以自己实现一个这样的框架. 知道数组吧?你当然知道,这就是: [ 14, 9, 5, 2, 10, 13 ...

  4. [转载]浅谈组策略设置IE受信任站点

    在企业中,通常会有一些业务系统,要求必须加入到客户端IE受信任站点,才能完全正常运行访问,在没有域的情况下,可能要通过管理员手动设置,或者通过其它网络推送方法来设置. 有了域之后,这项工作就可以很好的 ...

  5. Android学习笔记之使用LBS实现定位

    PS:最近一直在搞使用LBS实现定位.一般现在涉及到日常生活交易平台的app.貌似都需要使用定位.比如说美团外卖,我请客等app. 学习内容: 1.LBS定位的简单介绍. 2.在Map上添加地图覆盖物 ...

  6. Mysql学习笔记(六)增删改查

    PS:数据库最基本的操作就是增删改查了... 学习内容: 数据库的增删改查 1.增...其实就是向数据库中插入数据.. 插入语句 insert into table_name values(" ...

  7. SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第1部分)

    为了缩小读取操作所涉及范围,本文首先着眼于简单的SELECT查询,然后引入执行更新操作有关的附加过程.最后你会读到,优化性能时SQLServer使用还原工具的相关术语和流程. 关系和存储引擎 如图所示 ...

  8. 设置数据库为SINGLE_USER模式,减少锁定时间

    --SQL Server开启READ_COMMITTED_SNAPSHOT ----设置数据库为SINGLE_USER模式,减少锁定时间 ALTER DATABASE ENDV_SOA SET SIN ...

  9. 新的Visual C++代码优化器

    微软在 5 月 4 日发布了新的高级代码优化器,服务于 Visual C++ 的后端编译器.提高了代码性能,可以压缩代码体积,将编译器带入了一个新的境界. Visual C++ 的团队在博客上称,这将 ...

  10. 【jQuery基础学习】11 jQuery性能简单优化

    关于性能优化 合适的选择器 $("#id")会直接调用底层方法,所以这是最快的.如果这样不能直接找到,也可以用find方法继续查找 $("p")标签选择器也是直 ...