2011-03-09 75 views
2

我是android新手。我的要求是更新與選定的聯繫人圖片。下面是我寫來實現這個使用ContentResolver.Update更新Android聯繫人圖片時出現問題

byte[] imageBytes = imgContactPhoto.getDrawable().toString().getBytes(); 

     ContentValues values = new ContentValues(); 
    values.put(ContactsContract.Data.RAW_CONTACT_ID, contactId); 
    values.put(ContactsContract.Data.IS_SUPER_PRIMARY, 1); 
    values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, imageBytes); 
    values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE); 

    Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.parseLong(contactId)); 
    cr.update(uri, values, ContactsContract.Contacts._ID + " = " + contactId, null); 

imgContactPhoto代碼的ImageView的,在第一行中,我提取在其上設置圖像的字節陣列和更新所述接觸(與cotact ID =接觸)。 當我調試代碼,它順利通過所有上述語句,沒有任何例外,但聯繫人圖片不更新。當我在新手錶調試時檢查uri和值的值, 「uri」uri不能解決變量
「值」值不能解析爲變量

任何幫助表示讚賞。

+0

1更正(與cotact id = contactID(整數值)) – 2011-03-09 05:06:04

+0

你好,我發現設置聯繫人照片教程。只需按照鏈接:http://thinkandroid.wordpress.com/2009/12/30/handling-contact-photos-all-api-levels/ – 2011-10-28 16:56:27

回答

3

短ansewer是您試圖更新Contacts.CONTENT_URI,但照片存儲在Data.CONTENT_URI上。

您是否只需要更新聯繫人的主照片?如果是這樣,那就相當簡單了。要獲取數據條目的ID,請使用聯繫人上的PHOTO_ID,因爲這將自動引用具有等於1的IS_SUPER_PRIMARY的照片。一旦擁有此ID,請勿將RAW_CONTACT_ID添加到ContentValues中,並將更新語句更改爲:

Uri dataUri = ContentUris.withAppendedId(Data.CONTENT_URI, dataId); 
cr.update(dataUri , values, null, null); 

如果你可能在沒有人的聯繫人上設置照片,它會變得有點棘手。由於需要插入ContactsContract.Data條目,因此您需要指出正確的ContactsContract.RawContact以附加數據條目。如果只有一個它很簡單,但是如果用戶有幾個同步源,則可能有多個聯繫人的RawContacts。在這種情況下,您需要決定附加哪一個。