通过contentResolver更新交换两个联系人的照片

时间:2012-12-05 18:05:26

标签: android set contacts photo android-contentresolver

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

这是我试过的代码(不可运行,我只是复制了总代码的一些部分): 这就是我阅读信息的方式:

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);

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

1 个答案:

答案 0 :(得分:0)

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

尽管ContactsContract.CommonDataKinds.StructuredName继承了“照片”列名称,但结构化名称行无法识别那些

如果您要使用要交换的ContactsContract.Contacts列更新帖子,我会建议您更换照片的首选方式。