Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I choose a phone number with Android's contacts dialog

Tags:

I'm using the old Contacts API to choose a contact with a phone number. I want to use the newer ContactsContracts API. I want...

  1. ...a dialog shown with all contacts that have phone numbers.
  2. ...the user to choose a contact AND one of their phone numbers.
  3. ...access to the chosen phone number.

The ContactsContracts is very complicated. I found many examples, but none that fit my needs. I don't want to choose a contact and then query for the contact's details because this will give me a list of their phone numbers. I need the user to choose ONE of the contact's phone numbers. I don't want to have to write my own dialogs to display the contacts or to have the user pick a phone number. Is there any simple way to get what I want?

Here is the old API code I'm using:

static public final int CONTACT = 0; ... Intent intent = new Intent(Intent.ACTION_PICK, Contacts.Phones.CONTENT_URI); startActivityForResult(intent, CONTACT); ... public void onActivityResult (int requestCode, int resultCode, Intent intent) {   if (resultCode != Activity.RESULT_OK || requestCode != CONTACT) return;   Cursor c = managedQuery(intent.getData(), null, null, null, null);   if (c.moveToFirst()) {      String phone = c.getString(c.getColumnIndexOrThrow(Contacts.Phones.NUMBER));      // yay   } }       
like image 464
NateS Avatar asked Dec 23 '11 05:12

NateS


People also ask

How do I select a contact on my Android phone?

Contact someone On your Android phone or tablet, open the Contacts app . Tap a Contact in the list. Select an Option.

How can I get mobile number setting?

Check Your Phone Settings On Android the most common path to finding your number is: Settings > About phone/device > Status/phone identity > Network. This slightly differs on Apple devices, where you can follow the path of Settings > Phone > My Number.


1 Answers

Intent intent = new Intent(Intent.ACTION_PICK); intent.setType(ContactsContract.Contacts.CONTENT_TYPE); startActivityForResult(intent, PICK_CONTACT);  

This code might help you. I think the PICK action only returns the ID of the contact picked. From that you could query the Contact provider and if there are multiple phone numbers, prompt the user to select one of them.

You can use this too (updated):

public void readcontact(){     try {         Intent intent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts/people"));         startActivityForResult(intent, PICK_CONTACT);     } catch (Exception e) {         e.printStackTrace();     } }  public void onActivityResult(int reqCode, int resultCode, Intent data) {       super.onActivityResult(reqCode, resultCode, data);        switch (reqCode) {         case (PICK_CONTACT) :           if (resultCode == Activity.RESULT_OK) {               Uri contactData = data.getData();                 Cursor c =  managedQuery(contactData, null, null, null, null);                 startManagingCursor(c);                 if (c.moveToFirst()) {                     String name = c.getString(c.getColumnIndexOrThrow(People.NAME));                         String number = c.getString(c.getColumnIndexOrThrow(People.NUMBER));                     personname.setText(name);                     Toast.makeText(this,  name + " has number " + number, Toast.LENGTH_LONG).show();                  }            }          break;       }  } 

Updated 28/12 -2011

You can use this:

@Override   protected void onActivityResult(int requestCode, int resultCode, Intent data) {       if (resultCode == RESULT_OK) {           switch (requestCode) {           case CONTACT_PICKER_RESULT:             final EditText phoneInput = (EditText) findViewById(R.id.phoneNumberInput);             Cursor cursor = null;               String phoneNumber = "";             List<String> allNumbers = new ArrayList<String>();             int phoneIdx = 0;             try {                   Uri result = data.getData();                   String id = result.getLastPathSegment();                   cursor = getContentResolver().query(Phone.CONTENT_URI, null, Phone.CONTACT_ID + "=?", new String[] { id }, null);                   phoneIdx = cursor.getColumnIndex(Phone.DATA);                 if (cursor.moveToFirst()) {                     while (cursor.isAfterLast() == false) {                         phoneNumber = cursor.getString(phoneIdx);                         allNumbers.add(phoneNumber);                         cursor.moveToNext();                     }                 } else {                     //no results actions                 }               } catch (Exception e) {                  //error actions             } finally {                   if (cursor != null) {                       cursor.close();                 }                  final CharSequence[] items = allNumbers.toArray(new String[allNumbers.size()]);                 AlertDialog.Builder builder = new AlertDialog.Builder(your_class.this);                 builder.setTitle("Choose a number");                 builder.setItems(items, new DialogInterface.OnClickListener() {                     public void onClick(DialogInterface dialog, int item) {                         String selectedNumber = items[item].toString();                         selectedNumber = selectedNumber.replace("-", "");                         phoneInput.setText(selectedNumber);                     }                 });                 AlertDialog alert = builder.create();                 if(allNumbers.size() > 1) {                     alert.show();                 } else {                     String selectedNumber = phoneNumber.toString();                     selectedNumber = selectedNumber.replace("-", "");                     phoneInput.setText(selectedNumber);                 }                  if (phoneNumber.length() == 0) {                       //no numbers found actions                   }               }               break;           }       } else {        //activity result error actions     }   } 

You need to adapt this to work with your app.

like image 84
Rizvan Avatar answered Oct 31 '22 16:10

Rizvan