所以我写了一个查询来提取手机的WhatsApp联系人。我最初的查询是这样的:
Cursor c = con.getContentResolver().query(
ContactsContract.RawContacts.CONTENT_URI,
new String[]{ContactsContract.RawContacts.CONTACT_ID, ContactsContract.RawContacts.DISPLAY_NAME_PRIMARY},
ContactsContract.RawContacts.ACCOUNT_TYPE + "= ?",
new String[]{"com.whatsapp"},
null
);
ArrayList<String> myWhatsappContacts = new ArrayList<String>();
int contactNameColumn = c.getColumnIndex(ContactsContract.RawContacts.DISPLAY_NAME_PRIMARY);
while (c.moveToNext()) {
// You can also read RawContacts.CONTACT_ID to read the
// ContactsContract.Contacts table or any of the other related ones.
myWhatsappContacts.add(c.getString(contactNameColumn));
}
此操作的目的是找出手机一次与WhatsApp有多少联系。当我这样做时:
Log.i("WhatsApp contacts found:", Integer.toString(myWhatsappContacts.size());
它应该在LogCat中打印出有多少WhatsApp联系人。这行之有效-到了一定程度。
例如,假设我现在拥有的WhatsApp联系人数量为101。这个小项目的下一阶段是删除所有联系人(如果有100多个)。在这种情况下,我们去:
if (myWhatsappContacts.size() > 100) {
//Delete all contacts code here
}
我已经测试了删除联系人代码,它可以工作。我通过通讯录应用检查了电话的通讯录,它显示为0。但是现在当我再次执行查询时(请参阅上面的代码),它仍然显示101!发生了什么事?
如果有帮助,我的DeleteContacts方法如下:
private void deleteContact(Context ctx, String phone, String name) {
Uri contactUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phone));
Cursor cur = ctx.getContentResolver().query(contactUri, null, null, null, null);
try {
if (cur.moveToFirst()) {
do {
if (cur.getString(cur.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME)).equalsIgnoreCase(name)) {
String lookupKey = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey);
ctx.getContentResolver().delete(uri, null, null);
return;
}
} while (cur.moveToNext());
}
} catch (Exception e) {
System.out.println(e.getStackTrace());
} finally {
cur.close();
}
return;
}
我在做什么错?我的DeleteContacts代码是否有错误?还是查询本身有问题?