Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.contact_selector);

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

         @Override
         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.

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

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

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

                try
                {
                    c = getContentResolver().query(uri, null
                                                // new String[] { 
                            //ContactsContract.CommonDataKinds.Phone.NUMBER, 
                            //ContactsContract.CommonDataKinds.Phone.TYPE}, 
                            , null, null, null);

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

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.

Thanks.

like image 776
Jit Avatar asked Mar 01 '13 08:03

Jit


People also ask

Can I only show contacts with phone numbers in Android contacts?

Previous versions of Android used to include an option in the Google-developed Contacts app to only show contacts with phone numbers, but this was removed in Android 5.0 Lollipop. Because of this decision, you'll need a workaround to accomplish this now. Fortunately, our first method is simple to perform and is accessible to most Android users.

How do intents work with contacts?

Instead of accessing the Contacts Provider directly, an Intent starts the contacts app, which runs the appropriate Activity. For the modification actions described in this lesson, if you send extended data in the Intent it's entered into the UI of the Activity that is started.

How do I get my phone to show phone numbers only?

For LG devices, it requires a few more steps. Open the Phone app and select the Contacts tab. Select the three vertical dots in the upper-right corner of your display and choose "Contacts settings." Select "Display" and then enable "Show contact with phone numbers only."

How to import contact from your contact list in Android?

So using this article you can import contact from your contact list. You must use the following procedure. Create a new project "New" --> "Android Application project" then set the name to "Contact_picker". Open the Contact_picker /Manifest.xml file and update it using the following code.


4 Answers

Please use below code

Intent intent = new Intent(Intent.ACTION_PICK,  ContactsContract.Contacts.CONTENT_URI);
    intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
    startActivityForResult(intent, 1);
like image 138
Dinesh Prajapati Avatar answered Sep 19 '22 01:09

Dinesh Prajapati


*-> 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,
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
        startActivityForResult(contactPickerIntent, RESULT_PICK_CONTACT);

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

 @Override
    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);
            cursor.moveToFirst();           
            int  phoneIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
            phoneNo = cursor.getString(phoneIndex); 

            textView2.setText(phoneNo);
        } catch (Exception e) {
            e.printStackTrace();
        }
                break;
            }
        } else {
            Log.e("MainActivity", "Failed to pick contact");
        }
    }

This will work check it out*
like image 39
Ravi Avatar answered Sep 20 '22 01:09

Ravi


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);
like image 30
shantanu Avatar answered Sep 20 '22 01:09

shantanu


Uri uri = Uri.parse("content://contacts");
Intent intent = new Intent(Intent.ACTION_PICK, uri);
intent.setType(Phone.CONTENT_TYPE);
startActivityForResult(intent, REQUEST_CODE);
like image 29
Arun Kumar Avatar answered Sep 20 '22 01:09

Arun Kumar