2012-04-18 97 views
2

我試圖使用其查找URI來獲取聯繫人圖像。 我成功使用此代碼獲取DISPLAY_NAME:使用LOOKUP_URI在Android(API 8)中獲取聯繫人照片

Cursor c = context.getContentResolver().query(contactLookupUri, 
       new String[] { ContactsContract.Contacts.DISPLAY_NAME }, null, 
       null, null); 

但我沒有找到一種方式來獲得的照片。該Photo.PHOTO選項不適用於我使用,並試圖用一個InputStream沒有工作,以及得到它的API(也許是我做錯了什麼那裏):

InputStream input = ContactsContract.Contacts 
        .openContactPhotoInputStream(context.getContentResolver(), 
          contactUri); 

謝謝, 約爾

回答

2

最後,我要解決它獲取聯繫人ID和使用inputStream:

public static Uri getContactLookupUri(String contactLookupKey) { 
     return Uri.withAppendedPath(
       ContactsContract.Contacts.CONTENT_LOOKUP_URI, contactLookupKey); 
    } 

public static Bitmap getContactImage(Context context, String contactLookupKey) { 

    long contactId; 

    try { 
     Uri contactLookupUri = getContactLookupUri(contactLookupKey); 
     Cursor c = context.getContentResolver().query(contactLookupUri, 
       new String[] { ContactsContract.Contacts._ID }, null, null, 
       null); 
     try { 
      if (c == null || c.moveToFirst() == false) { 
       return null; 
      } 
      contactId = c.getLong(0); 
     } finally { 
      c.close(); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
     return null; 
    } 

    Uri contactUri = ContentUris.withAppendedId(
      ContactsContract.Contacts.CONTENT_URI, contactId); 
    InputStream input = ContactsContract.Contacts 
      .openContactPhotoInputStream(context.getContentResolver(), 
        contactUri); 

    if (input != null) { 
     return BitmapFactory.decodeStream(input); 
    } else { 
     return null; 
    } 
} 
+0

什麼是「contactLookupKey?」 – SpicyWeenie 2012-04-29 08:56:27

+0

lookupKey的解釋可以在這裏找到:http://developer.android.com/resources/articles/contacts.html – yoel 2012-04-29 16:02:46

1

下面這個函數返回你的CONTACT_ID的圖像URI

/** 
* @return the photo URI 
*/ 
public Uri getPhotoUri() { 
    try { 
     Cursor cur = this.ctx.getContentResolver().query(
       ContactsContract.Data.CONTENT_URI, 
       null, 
       ContactsContract.Data.CONTACT_ID + "=" + this.getId() + " AND " 
         + ContactsContract.Data.MIMETYPE + "='" 
         + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'", null, 
       null); 
     if (cur != null) { 
      if (!cur.moveToFirst()) { 
       return null; // no photo 
      } 
     } else { 
      return null; // error in cursor process 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return null; 
    } 
    Uri person = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long 
      .parseLong(getId())); 
    return Uri.withAppendedPath(person, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY); 
} 

也可參考此LINK

+0

嗨Agarwal,謝謝你的答案,但我沒有聯繫人ID,我只有lookupKey。我實際上不明白你的解決方案,因爲它似乎根本沒有使用查詢的結果。 – yoel 2012-04-21 08:30:44

+0

@yoel你可以發佈你的源代碼嗎?我不明白「Uri contactLookupUri = getContactLookupUri(con​​tactLookupKey);」 – SpicyWeenie 2012-04-29 09:14:37