2012-12-05 38 views
0

我想互换两个联系人的个人资料图片而不写任何字节流!我想知道是否可以用contentResolver更新PHOTO_FILE_ID,PHOTO_ID,PHOTO_THUMBNAIL_URI和PHOTO_URI。它甚至有可能吗?交换通过contentResolver更新的两个联系人的照片

这是我试过的代码(不是可运行的,我刚才复制的总代码的某些部分): 这是我读的信息:

String[] projection = new String[]{ ContactsContract.Data._ID, 
     ContactsContract.CommonDataKinds.StructuredName.PHOTO_FILE_ID, 
     ContactsContract.CommonDataKinds.StructuredName.PHOTO_ID, 
     ContactsContract.CommonDataKinds.StructuredName.PHOTO_THUMBNAIL_URI, 
     ContactsContract.CommonDataKinds.StructuredName.PHOTO_URI}; 

Cursor cursor = this.contentResolver.query(ContactsContract.Data.CONTENT_URI, projection, ContactsContract.Data.MIMETYPE + " LIKE ?", 
      new String[] { ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE }, null); 

if(cursor.moveToFirst()){ 
    long ID = cursor.getLong(cursor.getColumnIndex(
      ContactsContract.Data._ID)); 
    Integer photoFileID = cursor.getInt(cursor.getColumnIndex(
      ContactsContract.CommonDataKinds.StructuredName.PHOTO_FILE_ID)); 
    Integer photoID = cursor.getInt(cursor.getColumnIndex(
      ContactsContract.CommonDataKinds.StructuredName.PHOTO_ID)); 
    String photoThumbnailURI = cursor.getString(cursor.getColumnIndex(
      ContactsContract.CommonDataKinds.StructuredName.PHOTO_THUMBNAIL_URI)); 
    String photoURI = cursor.getString(cursor.getColumnIndex(
      ContactsContract.CommonDataKinds.StructuredName.PHOTO_URI)); 
} 
cursor.close(); 

,这是我尝试写在其他联系人信息:

ContentValues contentValues = new ContentValues(); 
contentValues.put(ContactsContract.CommonDataKinds.StructuredName.PHOTO_FILE_ID, photoFileID); 
contentValues.put(ContactsContract.CommonDataKinds.StructuredName.PHOTO_ID, photoID); 
contentValues.put(ContactsContract.CommonDataKinds.StructuredName.PHOTO_THUMBNAIL_URI, photoThumbnailURI); 
contentValues.put(ContactsContract.CommonDataKinds.StructuredName.PHOTO_URI, photoURI); 

String where = ContactsContract.Data._ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " LIKE ?"; 
String[] params = new String[] { String.valueOf(ID), 
           ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE }; 

this.contentResolver.update(ContactsContract.Data.CONTENT_URI, contentValues, where, params); 

如果我运行此脚本,调试器告诉我,列无效... 任何想法如何更新以另一种方式光细节?

+0

此处也粘贴调试器输出。它会帮助其他人了解问题。 – noob

回答

0

是的,这是联系人数据库中令人困惑的部分。

即使“照片”栏由ContactsContract.CommonDataKinds.StructuredName继承,那些无法识别的StructuredNames一行。

如果您将更新您的文章与您要交换的ContactsContract.Contacts列,我会推荐交换照片的首选方式。