Search code examples
androidemailandroid-contactsphone-numberpicker

Android contact picker: pick phone or email


Is it possible for the android contact picker to show a list of phone numbers & email address, and the user can select either a phone or an email.

I've tried the following Intents:

Intent.ACTION_PICK, Contacts.CONTENT_URI // - selects the entire contact
Intent.ACTION_PICK, Phone.CONTENT_URI    // - select only phones
Intent.ACTION_PICK, Email.CONTENT_URI    // - select only emails

Solution

  • it's already been answered : Link to answer but i will just post the code here

    private void contactPicked(Intent data) {
        ContentResolver cr = getContentResolver();
        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        cur.moveToFirst();
        try {
            // getData() method will have the Content Uri of the selected contact
            Uri uri = data.getData();
            //Query the content uri
            cur = getContentResolver().query(uri, null, null, null, null);
            cur.moveToFirst();
                                                    // column index of the contact ID
            String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                                                    // column index of the contact name 
            String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            txtNombreContacto.setText(name);        //print data            
                                                    // column index of the phone number
            Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, 
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
                        new String[]{id}, null);
                        while (pCur.moveToNext()) {
                            String phone = pCur.getString(
                                    pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                            txtTelefono.setText(phone);         //print data
                        } 
                        pCur.close();
                                                    // column index of the email   
            Cursor emailCur = cr.query(        
                    ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
                    null,
                    ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",  
                    new String[]{id}, null); 
                while (emailCur.moveToNext()) { 
                    // This would allow you get several email addresses
                        // if the email addresses were stored in an array  
                    String email = emailCur.getString(
                                  emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.ADDRESS));                                         
                    txtMailContacto.setText(email);         //print data
            } 
            emailCur.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    }