向现有 android 联系人添加新连接
Adding new connection to existing android contact
gyus.
我正在尝试添加与现有联系人的联系,就像 viber 所做的那样:
在 nemezis repo 之后添加具有此类连接的联系人非常简单,但我无法更新联系人以添加连接。我试过:
ops.add(ContentProviderOperation.newUpdate(addCallerIsSyncAdapterParameter(Data.CONTENT_URI, true))
.withSelection(Data.RAW_CONTACT_ID + "= ?", new String[]{String.valueOf(id)})
//.withValue(Data.RAW_CONTACT_ID, id)
.withValue(Data.MIMETYPE, MIMETYPE_PROFILE)
//.withValue(Data.DATA1, 12345)
.withValue(Data.DATA2, "sample")
.withValue(Data.DATA3, "sample")
.build());
但它无法正常工作。我尝试了很多其他选项,但也都失败了,我怀疑我是否应该 post 所有这些都在这里。伙计们,有什么想法吗?
非常感谢。
没关系,伙计们。我想通了。
android联系人系统使用匹配。此外 ACCOUNT_TYPE 信息只是 read/write-once 数据。因此,您需要做的是使用与现有联系人匹配的数据(使用显示名称、phone 号码或电子邮件)创建一个新的原始联系人。插入数据后 android 调用匹配和聚合帐户。一段代码:
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
int backId = 0;
ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(RawContacts.CONTENT_URI, true))
.withValue(RawContacts.ACCOUNT_NAME, AccountGeneral.ACCOUNT_NAME)
.withValue(RawContacts.ACCOUNT_TYPE, AccountGeneral.ACCOUNT_TYPE)
.build());
ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(Data.CONTENT_URI, true))
.withValueBackReference(Data.RAW_CONTACT_ID, backId)
.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
.withValue(StructuredName.DISPLAY_NAME, name)
.build());
ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(Data.CONTENT_URI, true))
.withValueBackReference(Data.RAW_CONTACT_ID, backId)
.withValue(Data.MIMETYPE, MIMETYPE)
//.withValue(Data.DATA1, 12345)
.withValue(Data.DATA2, "data2")
.withValue(Data.DATA3, "data3")
.build());
try {
context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (Exception e) {
e.printStackTrace();
}
gyus.
我正在尝试添加与现有联系人的联系,就像 viber 所做的那样:
在 nemezis repo 之后添加具有此类连接的联系人非常简单,但我无法更新联系人以添加连接。我试过:
ops.add(ContentProviderOperation.newUpdate(addCallerIsSyncAdapterParameter(Data.CONTENT_URI, true))
.withSelection(Data.RAW_CONTACT_ID + "= ?", new String[]{String.valueOf(id)})
//.withValue(Data.RAW_CONTACT_ID, id)
.withValue(Data.MIMETYPE, MIMETYPE_PROFILE)
//.withValue(Data.DATA1, 12345)
.withValue(Data.DATA2, "sample")
.withValue(Data.DATA3, "sample")
.build());
但它无法正常工作。我尝试了很多其他选项,但也都失败了,我怀疑我是否应该 post 所有这些都在这里。伙计们,有什么想法吗?
非常感谢。
没关系,伙计们。我想通了。
android联系人系统使用匹配。此外 ACCOUNT_TYPE 信息只是 read/write-once 数据。因此,您需要做的是使用与现有联系人匹配的数据(使用显示名称、phone 号码或电子邮件)创建一个新的原始联系人。插入数据后 android 调用匹配和聚合帐户。一段代码:
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
int backId = 0;
ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(RawContacts.CONTENT_URI, true))
.withValue(RawContacts.ACCOUNT_NAME, AccountGeneral.ACCOUNT_NAME)
.withValue(RawContacts.ACCOUNT_TYPE, AccountGeneral.ACCOUNT_TYPE)
.build());
ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(Data.CONTENT_URI, true))
.withValueBackReference(Data.RAW_CONTACT_ID, backId)
.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
.withValue(StructuredName.DISPLAY_NAME, name)
.build());
ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(Data.CONTENT_URI, true))
.withValueBackReference(Data.RAW_CONTACT_ID, backId)
.withValue(Data.MIMETYPE, MIMETYPE)
//.withValue(Data.DATA1, 12345)
.withValue(Data.DATA2, "data2")
.withValue(Data.DATA3, "data3")
.build());
try {
context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (Exception e) {
e.printStackTrace();
}