【问题标题】:Update contact image in android contact provider更新 android 联系人提供程序中的联系人图片
【发布时间】:2013-01-14 02:29:34
【问题描述】:

我创建了一个应用程序来读取、更新、删除联系人详细信息。 这是更新 Contact_Image 的问题。

当没有图像的应用程序外部的设备添加了新联系人时。 那么我们无法更新联系人图片。 我的更新代码是。

    ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI)
                .withSelection(Data.CONTACT_ID+"= ? AND "+ContactsContract.Data.MIMETYPE+"=?",new String[]{id,ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE})
                .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, imageInByte)
                .build());

请提供解决方案。

【问题讨论】:

    标签: android android-contentprovider android-contacts


    【解决方案1】:

    您将有不同的代码来更新照片,然后将照片添加到没有照片的联系人。根据您上面的描述,我相信您正在尝试插入图像而不是更新图像,但以下是两者的代码:

            if(hasPhoto(resolver, id) == true)
            {
                int photoRow = -1;
                String where = ContactsContract.Data.RAW_CONTACT_ID + " = " + id + " AND " + ContactsContract.Data.MIMETYPE + " =='" + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'"; 
                Cursor cursor = resolver.query(ContactsContract.Data.CONTENT_URI, null, where, null, null);
                int idIdx = cursor.getColumnIndexOrThrow(ContactsContract.Data._ID);
                if (cursor.moveToFirst()) {
                    photoRow = cursor.getInt(idIdx);
                }
                cursor.close();
    
                // Update current photo
                ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
                ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
                        .withSelection(ContactsContract.Data._ID + " = ?", new String[] {Integer.toString(photoRow)})
                        .withValue(ContactsContract.Data.RAW_CONTACT_ID, id)
                        .withValue(ContactsContract.Data.IS_SUPER_PRIMARY, 1)
                        .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)
                        .withValue(ContactsContract.Data.DATA15, photoBytes)
                        .build());
    
                try {
                    resolver.applyBatch(ContactsContract.AUTHORITY, ops);
                } catch (RemoteException e) {
    
                } catch (OperationApplicationException e) {
                // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            else
            {
                // Create new photo entry
                int rawContactId = -1;
                Cursor cursor = resolver.query(ContactsContract.RawContacts.CONTENT_URI, null, ContactsContract.RawContacts.CONTACT_ID + "=?", new String[] {id}, null);
    
                if(cursor.moveToFirst())
                {
                    rawContactId = cursor.getInt(cursor.getColumnIndex(ContactsContract.RawContacts._ID));
    
                    if(rawContactId > -1)
                    {
                        ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
                        ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                                .withValue(ContactsContract.Data.RAW_CONTACT_ID, rawContactId)
                                .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)
                                .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, photoBytes)
                                .build());
    
                        try 
                        {
                            resolver.applyBatch(ContactsContract.AUTHORITY, ops);
                        } catch (RemoteException e) {
    
                        } catch (OperationApplicationException e) {
                        // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }
            }
    

    不同之处在于,如果您要更新现有照片,则使用 newUpdate 功能,但如果您要向从未有过照片的联系人插入照片,则使用 newInsert

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多