我可以获取每个联系人的联系人和电话号码,但电话号码是重复的我认为有一些选项可以显示与其他应用程序(如Viber等)链接的联系人,因此联系人正在检索重复的
如何避免选择每个联系人的重复号码?
答案 0 :(得分:0)
试试这个
Intent intent = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, 3);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 3) {
if (resultCode == RESULT_OK) {
Uri contactData = data.getData();
contactNumber = "";
Cursor cursor = getContentResolver().query(contactData, null, null, null, null);
cursor.moveToFirst();
String hasPhone = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER));
String contactId = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
if (hasPhone.equals("1")) {
Cursor phones = getContentResolver().query
(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = " + contactId, null, null);
while (phones.moveToNext()) {
contactNumber = phones.getString(phones.getColumnIndex
(ContactsContract.CommonDataKinds.Phone.NUMBER)).replaceAll("[-() ]", "");
contactName=phones.getString(phones.getColumnIndex
(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
}
phones.close();
告诉我这是否解决了你的问题。 :)
答案 1 :(得分:0)
我使用hashmap解决了这个问题。您将设备ID的哈希映射设为电话号码。在检查hashmap是否包含该设备ID之前,将每个数字添加到hashmap中。
通过查询以下URI获取设备ID。
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String[] projection = new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.PHOTO_URI, ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME};
Hashmap<String , Contact > = new Hashmap<String , Contact>();
if (contactHashMap.containsKey(id)) {
// skip that contact.
}
else {
//fill your contact object.
// get device id of contact from mobile
contactHashMap.put(id, contact);
}
这样你可以避免重复。还有另一种查询其他表的方法,它给出了设备ID的编号。但这需要两次查询。以上hashmap方法效率很高,对我来说效果很好。