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

android如何取得本地通讯录的头像的原图的实现代码

程序员文章站 2022-05-16 12:06:38
本文介绍了android如何取得本地通讯录的头像的原图的实现代码,分享给大家,也给自己留个笔记 如果想通讯录进入详情页,那么最重要的参数就是contactid,这个是联系...

本文介绍了android如何取得本地通讯录的头像的原图的实现代码,分享给大家,也给自己留个笔记

如果想通讯录进入详情页,那么最重要的参数就是contactid,这个是联系人的唯一标识

getlistview().setonitemclicklistener(new adapterview.onitemclicklistener() {
  @override
  public void onitemclick(adapterview<?> parent, view view, int position, long id) {
   try {
     cursor cursor = (cursor) getlistadapter().getitem(position);
     if (cursor == null) {
      return;
     }
 
     int contactid = cursor.getint(personal.id_column_index);
     intent intent = new intent();
     intent.setclass(contactslist.this, contactdetail.class);
     intent.putextra("contactid",contactid);
     startactivity(intent);
   }catch(exception ex) {
     ex.printstacktrace();
   }
  }
});

本地通讯录的原图获取方法是:

public class contactdetail extends activity {
 
  private imageview contact_photo;
 
  public static void startactivity(context context) {
    intent intent = new intent();
    intent.setclass(context,contactdetail.class);
    context.startactivity(intent);
  }
 
  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    requestwindowfeature(window.feature_no_title);
    setcontentview(r.layout.contact_detail);
 
    int contactid = getintent().getintextra("contactid", 0);
 
    contact_photo = (imageview)findviewbyid(r.id.contact_photo);
 
    loadtask task = new loadtask(contactid);
    task.execute();
 
  }
 
 
  private class loadtask extends asynctask<void, void, bitmap> {
 
    public loadtask(int id) {
      contactid = id;
    }
    private int contactid;
 
    @override
    protected bitmap doinbackground(void... params) {
      inputstream inputstream = opendisplayphoto(contactid);
 
      bitmapfactory.options opt = new bitmapfactory.options();
      opt.insamplesize = 1;
      bitmap bitmap = bitmapfactory.decodestream(inputstream, null, opt);
      return bitmap;
    }
 
    @override
    protected void onpostexecute(bitmap result) {
 
      if(result != null) {
        contact_photo.setimagebitmap(result);
      }
      super.onpostexecute(result);
    }
 
  }
 
  /**
   * 这个是取到清晰图的inputstream的代码
   * @param contactid
   * @return
   */
  public inputstream opendisplayphoto(long contactid) {
    uri contacturi = contenturis.withappendedid(contactscontract.contacts.content_uri, contactid);
    uri displayphotouri = uri.withappendedpath(contacturi, contactscontract.contacts.photo.display_photo);
    try {
      assetfiledescriptor fd =
          this.getcontentresolver().openassetfiledescriptor(displayphotouri, "r");
      return fd.createinputstream();
    } catch (ioexception e) {
      e.printstacktrace();
      return null;
    }
  }
 
}

activity的运行效果是:

android如何取得本地通讯录的头像的原图的实现代码

代码在https://github.com/nickgao1986/stepsport

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。