欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android获取相册图片和路径的实现方法

程序员文章站 2024-02-26 23:08:10
android开发获取相册图片的方式网上有很多种,这里说一个android4.4后的方法,因为版本越高,一些老的api就会被弃用,新的api和老的api不兼容,导致出现很多...

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软件编程有所帮助。