how to select unique contacts from android

后端 未结 3 955
感动是毒
感动是毒 2021-01-05 15:01

i want to select unique contacts from android only that contacts which have phone numbers. i am using this code

ContentResolver cr = getCont         


        
相关标签:
3条回答
  • 2021-01-05 15:38

    I think you mean you got duplicate record for some contacts. So you must add condition for your query. The essential part is contacts must be in visible group and have phone number.

    String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '"
                    + ("1") + "'";
            String sortOrder = ContactsContract.Contacts.DISPLAY_NAME
                    + " COLLATE LOCALIZED ASC";
    cur = context.getContentResolver().query(
                    ContactsContract.Contacts.CONTENT_URI, projection, selection
                            + " AND " + ContactsContract.Contacts.HAS_PHONE_NUMBER
                            + "=1", null, sortOrder);// this query only return contacts which had phone number and not duplicated
    

    Update 20/05/2020

      suspend fun fetchContacts(): ArrayList<FriendItem> {
            val list = ArrayList<FriendItem>()
            val uri: Uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI
            val selection = ContactsContract.Contacts.HAS_PHONE_NUMBER
            val cursor: Cursor? = context.contentResolver.query(
                uri,
                arrayOf(
                    ContactsContract.CommonDataKinds.Phone.NUMBER,
                    ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                    ContactsContract.CommonDataKinds.Phone._ID,
                    ContactsContract.Contacts._ID
                ),
                selection,
                null,
                ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC"
            )
    
            cursor?.let {
                val nameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)
                val phoneIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)
                while (cursor.moveToNext()) {
                    val info = FriendItem(
                        friendName = cursor.getString(nameIndex),
                        friendPhoneNumber = cursor.getString(phoneIndex)
                    )
                    list.add(info)
                }
                cursor.close()
            }
            return list
        }
    
    0 讨论(0)
  • 2021-01-05 15:42

    easy way to get phonenumbers and contact names

    // set as global
    Set<string> phonenumbersList = new HashSet<string>();
    
                Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
                while (phones.moveToNext())
                {
                String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    
                //contact has name number and phonenumber does not exists in list
                if ( phoneNumber != null && name != null && !phonenumbersList.contains(phoneNumber)){ 
                    planets = new ContactsList[]{ new ContactsList(name, phoneNumber) };
    
                    phonenumbersList.add(phoneNumber);
                    planetList.addAll(Arrays.asList(planets));
                    planetList.Add(phoneNumber, name);
                }
                }
                phones.close();
    
    0 讨论(0)
  • 2021-01-05 15:48

    This is working for me to get contact with phone number. Here we are querying Data table, and using CONTACT_ID contact provider documentation

        @Override
        public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    
    final String ORDER_BY = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY + " ASC";
    
        final String[] PROJECTION = {
                ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
                ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY,
                ContactsContract.CommonDataKinds.Phone.NUMBER
        };
    
    return new CursorLoader(
                    context,
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                    PROJECTION,
                    null,
                    null,
                    ORDER_BY
            );
    }
    
    0 讨论(0)
提交回复
热议问题