【问题标题】:Edit name/phone number of contact programmatically以编程方式编辑联系人的姓名/电话号码
【发布时间】:2013-05-29 01:02:12
【问题描述】:

我正在尝试以编程方式修改联系人的显示名称:

     try {
        ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

        ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI)
        .withSelection(ContactsContract.CommonDataKinds.Phone._ID + " = ?", new String[] {contact_id})
        .withValue(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, "anything")
        .build());

        ContentProviderResult[] result = getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
    } catch (Exception e) {
        Log.w("UpdateContact", e.getMessage()+"");
        for(StackTraceElement ste : e.getStackTrace()) {
            Log.w("UpdateContact", "\t" + ste.toString());
        }
        Context ctx = getApplicationContext();
        int duration = Toast.LENGTH_SHORT;
        Toast toast = Toast.makeText(ctx, "Update failed", duration);
        toast.show();
    }

contact_idContactsContract.CommonDataKinds.Phone._ID 在之前的活动中收集的

代码执行得很好,但是:

  • ContentProviderResult[] 结果为空
  • 联系人姓名保持不变

我也尝试过Data.DISPLAY_NAME,但效果相同。

我阅读了手册:http://developer.android.com/guide/topics/providers/contacts-provider.html,但我不想调用原生意图。

谢谢。

【问题讨论】:

  • 真的吗?没人能帮忙吗?

标签: android android-contacts contactscontract android-contentresolver


【解决方案1】:

您应该在选择中指定 mimetype。

.withSelection(ContactsContract.CommonDataKinds.Phone._ID + "=? AND " +
               Data.MIMETYPE + "='" +
               ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE + "'",
               new String[]{contact_id})

如果您还没有弄清楚这一点,请尝试一下。我发现更新联系人在正确选择参数方面非常棘手。

【讨论】:

  • 前段时间我已经想通了,这就是线索。无论如何,谢谢;)。
  • @androfan 如果您找到了答案,请发布完整代码。谢谢:)
猜你喜欢
  • 2017-06-16
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
  • 2015-06-01
  • 1970-01-01
  • 2016-12-26
  • 2011-03-05
  • 1970-01-01
相关资源
最近更新 更多