对于联系人备份应用程序,我将所有信息保存到 CSV 文件,然后我需要将其恢复。它工作得很好,但是如果我按两次恢复,它会复制所有联系人。
我尝试了以下代码来删除重复项,它确实有效,但在某些情况下会失败。基本上,当没有明确的 DISPLAY_NAME 时,它会失败,例如,如果联系人似乎只有一个电话号码,而 DISPLAY_NAME 是电话号码,或者与电子邮件地址相同。我不明白为什么它不会总是有效,因为 DISPLAY_NAME 字段似乎包含电话号码/电子邮件地址。
这是我使用的代码:
private boolean contactExists(String displayname, String emailstring, String phonestring){
Cursor crsr = BA.applicationContext.getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI,
new String[] { "display_name", "_id"},
"display_name = ? ",
new String[] {displayname},
null);
while (crsr.moveToNext()){
HashMap m = new HashMap();
for (int col = 0; col < crsr.getColumnCount(); col++) {
m.put(crsr.getColumnName(col), Integer.valueOf(col));
}
int id = crsr.getInt(((Integer)m.get("_id")).intValue());
String emails = GetEmails(id);
String phones = GetPhones(id);
if (emails.contentEquals(emailstring) && phones.contentEquals(phonestring))
{
crsr.close();
return true;
}
}
crsr.close();
return false;
}
更新: 我尝试使用 DISPLAY_NAME_PRIMARY 得到相同的结果。
但是我注意到,如果我在同一个设备/模拟器上创建联系人,当我重新恢复相同的联系人时,会检测到重复。在跨设备时,它不起作用的一个原因似乎是在某些时候特殊字符被删除了。例如,显示名称“John.Doe”是从 CSV 读取的,但是当它被插入时,它变成了“John Doe”。我看不到代码中“。”的位置。永远被剥离出来。