Android联系电话号码获取重复

时间:2016-11-28 14:11:15

标签: android contacts

我可以获取每个联系人的联系人和电话号码,但电话号码是重复的我认为有一些选项可以显示与其他应用程序(如Viber等)链接的联系人,因此联系人正在检索重复的

如何避免选择每个联系人的重复号码?

2 个答案:

答案 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方法效率很高,对我来说效果很好。