如何选择新联系人的ID

时间:2014-12-01 07:17:28

标签: android android-contacts

我想在设备的地址簿中创建联系人。 问题heredocumentation的答案表明我们必须提供联系人的ID。

以下是文档中的示例:

ContentValues values = new ContentValues();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
values.put(Phone.NUMBER, "1-800-GOOG-411");
values.put(Phone.TYPE, Phone.TYPE_CUSTOM);
values.put(Phone.LABEL, "free directory assistance");
Uri dataUri = getContentResolver().insert(Data.CONTENT_URI, values);

如何选择/生成此ID?如果我选择一个随机值,它可能会与现有联系人发生冲突?

2 个答案:

答案 0 :(得分:2)

如果查看Documentation 你会发现一个表描述了所有字段,其中有RAW_CONTACT_ID,我引用

The id of the row in the ContactsContract.RawContacts table that this data belongs to.

所以这是RawContacts表中插入记录的ID,就好像它是主详细信息模式一样 有关RawContacts

的更多信息,请查看this link

所以我认为你必须首先插入rawContact,得到它(自动生成的id) 并用它来插入联系人

类似这样的事情

ContentValues values = new ContentValues();
values.put(RawContacts.ACCOUNT_TYPE, accountType);
values.put(RawContacts.ACCOUNT_NAME, accountName);
Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values);
long insertedRawContactId = ContentUris.parseId(rawContactUri);

然后使用insertedRawContactId插入联系人。

ContentValues values = new ContentValues();
values.put(Data.RAW_CONTACT_ID, insertedRawContactId );
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
values.put(Phone.NUMBER, "1-800-GOOG-411");
values.put(Phone.TYPE, Phone.TYPE_CUSTOM);
values.put(Phone.LABEL, "free directory assistance");
Uri dataUri = getContentResolver().insert(Data.CONTENT_URI, values);

检查this site以获取更多信息以明确说明。 关于3种类型或3种接触元素,请查看此图像 Android Contacts...

并检查this answer点1,2,3,......等

希望这有助于您更多地理解

答案 1 :(得分:0)

尝试这样,

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
int rawContactInsertIndex = ops.size();
ContentValues values = new ContentValues();
values.put(Data.RAW_CONTACT_ID, rawContactInsertIndex);
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
values.put(Phone.NUMBER, "1-800-GOOG-411");
values.put(Phone.TYPE, Phone.TYPE_CUSTOM);
values.put(Phone.LABEL, "free directory assistance");
Uri dataUri = getContentResolver().insert(Data.CONTENT_URI, values);

希望它会帮助你