我创建了一个小活动,显示手机中所有带有电话号码的联系人。但是,安装了whatsapp的联系人有重复项。例如,如果John在我的联系人列表中并且他也有一个whatsapp帐户,那么列表将如下所示:
...
杰克
约翰
约翰
JP
...
这是我的代码,用于将光标分配给链接到列表视图的适配器。
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC";
final Cursor cursor = getContentResolver().query(uri, null, null, null, sortOrder);
String[] from = {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone._ID};
int[] to = {android.R.id.text1};
adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_multiple_choice, cursor, from, to, 0);
修改 使用此代码,我确认重复项的值为 ContactsContract.CommonDataKinds.Phone.TYPE ,这意味着它是自定义联系人(Whatsapp)。其余的是2,这意味着它是正常接触。
我需要找出一个查询,其中不使用任何联系人,其中ContactsContract.CommonDataKinds.Phone.TYPE == 0
答案 0 :(得分:0)
我知道可能有点晚了。但是我遇到了同样的问题。
根据{{3}},ContactsContract.CommonDataKinds.Phone.TYPE不是指它是自定义联系人,而是指它是什么类型的联系人,即移动(2),家庭(1)或工作(3) 。 Whatsapp联系人将是2 - 移动。
我使用以下函数删除重复项(不确定是否有更好的方法):
private boolean checkDuplicate(String position) {
LinkedHashMap<String, Integer> map;
Integer testNull;
map=new LinkedHashMap<>();
testNull=map.get(position);
if(testNull==null) {
testNull=1;
map.put(position, testNull);
return false;
}
else {
testNull=testNull+1;
if(testNull==2) {
return true;
}
else {
map.put(position, testNull);
return false;
}
}
}