【问题标题】:Add number to contact on Android 2.0在 Android 2.0 上添加联系人号码
【发布时间】:2011-01-13 10:56:51
【问题描述】:

我正在尝试将电话号码添加到 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);

最大的挑战是大量缺乏良好的文档。如果能拿到一些工作中的 copypasta 来学习,我会非常满意。

干杯,

【问题讨论】:

    标签: android android-contacts


    【解决方案1】:

    我找到了答案。如果您想立即添加几项内容,这不是原子性的,但是,嘿,谁需要愚蠢的原子性?

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

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

      【讨论】:

        【解决方案3】:
        猜你喜欢
        • 2011-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-27
        • 2015-03-11
        相关资源
        最近更新 更多