Home » Android » Displaying contacts only with phone numbers using ACTION_PICK intent in Android device

Displaying contacts only with phone numbers using ACTION_PICK intent in Android device

Posted by: admin June 15, 2020 Leave a comment


My goal is to only display contacts with phone number to user and let user select few contacts which I want to store locally.

I have used various options in place of ContactsContract.Contacts.CONTENT_URI in below method. But I am getting lot many of the contacts (many are junk with only email ids) displayed.

    public void onCreate(Bundle savedInstanceState) {


        ((Button)findViewById(R.id.btnphonecontactlist)).setOnClickListener(new OnClickListener() {

         public void onClick(View v) {
           // TODO Auto-generated method stub
           Intent contactIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
            startActivityForResult(contactIntent, 1);

If I pass ContactsContract.Contacts.CONTENT_URI as parameter for above method and in case of below handler method, the String[] for the query method as projection parameters (which are shown commented), the method fails with java.lang.IllegalArgumentException. If I pass null in below method, then whatever contact I select, I don’t find any column related to phone number or email.

    public void onActivityResult(int requestCode, int resultCode, Intent data) {

        if(data != null)
            Uri uri = data.getData();

            if(uri != null)
                Cursor c = null;

                    c = getContentResolver().query(uri, null
                                                // new String[] { 
                            , null, null, null);

                    if(c != null && c.moveToFirst())
                        String number = c.getString(0);
                        String type = c.getString(1);
                    if(c != null && !c.isClosed())

Is there any way to display only contacts visible to user usually when user goes to phone book and which has phone numbers available?

I tried going through all the threads in stackoverflow and other sites, but could not find any solution which resolve issue around this though many people have posted the issue. I haven’t worked much with the Android platform and I might have missed out certain minor details and I believe there must be an easy way to achieve this.

Kindly suggest. Appreciate your help.


How to&Answers:

Please use below code

Intent intent = new Intent(Intent.ACTION_PICK,  ContactsContract.Contacts.CONTENT_URI);
    startActivityForResult(intent, 1);


*-> Add a permission to read contacts data to your application manifest.

<uses-permission android:name="android.permission.READ_CONTACTS"/>

-> Use Intent.ACTION_PICK in your Activity 

Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,
        startActivityForResult(contactPickerIntent, RESULT_PICK_CONTACT);

-> Then Override the onActivityResult() and retrieve the ID,Phone number and Name in the data. 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // check whether the result is ok
        if (resultCode == RESULT_OK) {
            // Check for the request code, we might be usign multiple startActivityForReslut
            switch (requestCode) {
            case RESULT_PICK_CONTACT:
               Cursor cursor = null;
        try {
            String phoneNo = null ;
            String name = null;           
            Uri uri = data.getData();            
            cursor = getContentResolver().query(uri, null, null, null, null);
            int  phoneIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
            phoneNo = cursor.getString(phoneIndex); 

        } catch (Exception e) {
        } else {
            Log.e("MainActivity", "Failed to pick contact");

This will work check it out*


Following code will do what you want.

Intent intent = new Intent(Intent.ACTION_PICK,ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(Intent.createChooser(intent, "Contact"), PICK_CONTACT);


Uri uri = Uri.parse("content://contacts");
Intent intent = new Intent(Intent.ACTION_PICK, uri);
startActivityForResult(intent, REQUEST_CODE);


Use this:

Intent intent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts/people"));
startActivityForResult(intent, 1);