安卓2.0如何给联系人添加号码

4

我正在尝试在Droid手机上向已存在的联系人添加电话号码。如果同时创建一个联系人和添加电话号码,那么只需在创建ContentProviderOperation时提供的反向引用为0即可轻松完成。但是,通过查询类似于此的显示名称查找反向引用并不能正常工作:

Cursor rawContactsReferenceCursor = 
            contentResolver.query(Data.CONTENT_URI, 
                    new String[]{Data.RAW_CONTACT_ID},
                    Data.DISPLAY_NAME+"=\""+displayName+"\"", null, null);

虽然我已经获取到了一个原始联系人ID,但以下代码仍会生成一个IndexOutOfBoundException异常(rawConcactReferenceID是我从前面的查询中得到的变量):

ArrayList<ContentProviderOperation> op_list = 
    new ArrayList<ContentProviderOperation>();
op_list.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI)
    .withValueBackReference(Data.RAW_CONTACT_ID, rawConcactReferenceID)
    .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
    .withValue(Phone.NUMBER, testNumber)
    .withValue(Phone.TYPE, Phone.TYPE_CUSTOM)
    .withValue(Phone.LABEL, testLabel)
    .build()); 
ContentProviderResult[] result =
    contentResolver.applyBatch(ContactsContract.AUTHORITY, op_list);

最大的挑战是缺乏良好的文档。我会很满意地拿到一些可行的复制粘贴代码来学习。

祝好,

3个回答

4
我找到了一个答案。如果你想一次添加多个东西,它不是原子性的,但是嘿,谁需要愚蠢的原子性呢?
ContentValues values = new ContentValues();
values.put(Data.RAW_CONTACT_ID, new Integer(contactId).intValue());
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
values.put(Phone.NUMBER, dataValue);
values.put(Phone.TYPE, Phone.TYPE_CUSTOM);
values.put(Phone.LABEL, customLabel);
Uri dataUri = getContentResolver().insert(Data.CONTENT_URI, values);

2

我曾经遇到过与电子邮件地址相关的类似问题。以下是我使用的解决方案:

ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
    .withValue(Data.RAW_CONTACT_ID, id)
    .withValue(Email.DATA, value)
    .withValue(Email.MIMETYPE, .Email.CONTENT_ITEM_TYPE)
    .withValue(Email.LABEL, label)
    .withValue(Email.TYPE, Email.TYPE_CUSTOM)
    .build());
ContentProviderResult[] res = cr.applyBatch(ContactsContract.AUTHORITY, ops);

同样的解决方案应该适用于电话号码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接