联系人ID在更新后增加(android API级别7及更高)
我正在编写一个将android联系人信息与服务器信息同步的应用程序。服务器信息更改后,我正在更新所有原始联系人,每个人都很高兴。但我发现在用几个原始联系人更新联系人后,联系人ID的值增加了一个。如果我从设备更新联系人,联系人ID仍将保持不变 假设您与下一个数据有联系:联系人ID在更新后增加(android API级别7及更高),android,android-contacts,Android,Android Contacts,我正在编写一个将android联系人信息与服务器信息同步的应用程序。服务器信息更改后,我正在更新所有原始联系人,每个人都很高兴。但我发现在用几个原始联系人更新联系人后,联系人ID的值增加了一个。如果我从设备更新联系人,联系人ID仍将保持不变 假设您与下一个数据有联系: contact_id : 42 raw_contact_ids : { 43, 44, 45 } (1) 更新后,您将有: contact_id : 43 raw_contact_ids : { 43, 44, 45 } (2
contact_id : 42
raw_contact_ids : { 43, 44, 45 }
(1) 更新后,您将有:
contact_id : 43
raw_contact_ids : { 43, 44, 45 }
(2) 但是,如果使用用户界面使用设备更新同一联系人,您将获得:
contact_id : 42
raw_contact_ids : { 43, 44, 45 }
我不理解这种行为。我认为这可能是因为联系人聚合,但我不明白为什么(2)中的结果与(1)中的结果不同。我正在使用下一个代码更新原始联系人中的电话号码数据:
String selectPhone = Data.RAW_CONTACT_ID + "=? AND " + Data.MIMETYPE + "='" +
Phone.CONTENT_ITEM_TYPE + "'" + " AND " + Phone.TYPE + "=? AND " + Phone._ID + "=?";
String[] selectArgs = new String[] { String.valueOf(rawContactId), String.valueOf(from.getType()), String.valueOf(id) };
ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI)
.withSelection(selectPhone, selectArgs)
.withValue(Phone.NUMBER, newNumber)
.build());
字符串选择Phone=Data.RAW\u CONTACT\u ID+“=”和“+Data.MIMETYPE+”=”+
Phone.CONTENT_ITEM_TYPE+“+”和“+Phone.TYPE+”=?和“+Phone.ID+”=?”;
String[]selectArgs=newstring[]{String.valueOf(rawContactId),String.valueOf(from.getType()),String.valueOf(id)};
添加(ContentProviderOperation.newUpdate(Data.CONTENT\u URI)
.选择(选择Phone,选择Args)
.withValue(电话号码、新号码)
.build());
有人能解释一下我做错了什么吗?我真的需要这些联系人ID。据我所知,在存储或使用联系人时最好使用查找键,使用联系人ID不会因聚合而保持静态。什么是查找键,我应该使用它做什么?我从报纸上读到这件事,但不太明白。感谢您的解释。lookup_键本质上是联系人id的一个更静态的版本。因此,例如,当想要与联系人一起工作时,您可以使用此键而不是联系人id,因为据我所知,它在新的设备安装中似乎更为一致。下面是一个获取联系人的示例,其中包含一些详细信息,包括LOOKUP_KEY:contactsCursor=context.getContentResolver().query(Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_Uri,Uri.encode(messageFromNumber)),新字符串[]{ContactsContract.PhoneLookup.DISPLAY_NAME,ContactsContract.PhoneLookup.LOOKUP__KEY},null,null);