获取高分辨率联系人照片作为API级别14 Android下方的位图

时间:2013-09-07 09:20:02

标签: android image contact

我需要将联系人的联系人图片作为位图。

我找到了这段代码:

        Uri my_contact_Uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, String.valueOf(id));
        InputStream photo_stream = ContactsContract.Contacts.openContactPhotoInputStream(cr, my_contact_Uri, true);
        BufferedInputStream buf = new BufferedInputStream(photo_stream);
        Bitmap my_btmp = BitmapFactory.decodeStream(buf);
        buf.close();
        return my_btmp;

效果很好,但函数openContactPhotoInputStream(cr,my_contact_Uri,true)仅在API 14+上可用。 openContactPhotoInputStream(cr,my_contact_Uri)也适用于早期版本,但没有第3个参数,它似乎只检索缩略图。

documentation中说:

See Also
if instead of the thumbnail the high-res picture is preferred

但是这个说明背后的链接似乎再次引领当前页面

我可以获得图像的uri,但那又是什么?

2 个答案:

答案 0 :(得分:3)

很简单:API 14下面没有高分辨率的联系人图片。 您需要在较低的API上使用低分辨率或将min-sdk设置为14。

它已在API 14中添加,而较低的API将永远不会出现您手动创建的Uri背后的任何内容。

答案 1 :(得分:0)

使用它:

ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
            null, null, null);
if (cur.getCount() > 0) {
    while (cur.moveToNext()) {
        String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
         int SDK_INT = android.os.Build.VERSION.SDK_INT;
         if(SDK_INT>=11){
            image_uri=cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_URI));
            if (image_uri != null) {
            try {
                bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(),Uri.parse(image_uri));} 
             }catch (FileNotFoundException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
             } catch (IOException e) {
            // TODO Auto-generated catch block
             e.printStackTrace();
             }
         }
       }else{
          bitmap=loadContactPhoto(cr, Long.valueOf(id));
          if(bitmap!=null)
          {
            //show bitmap
           }
        }
  }
}

使用过的方法:

public Bitmap loadContactPhoto(ContentResolver cr, long id) {
    Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id);
    InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(cr, uri);
    if (input == null) {
         return null;
    }
    return BitmapFactory.decodeStream(input);
}