Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to call Android contacts list AND Select one phone number from its details screen?

Tags:

android

I have read the already posted solutions, but they dont tell how do I use system's contact details screen to select any ONE number to use? I am developing an sms sending android app which offers to choose contacts of the phone and the number a user wants to use to send to....

So far I have not been able to find anything about choosing any one number. Does it only has to be done programatically? retrieving all numbers from database and sending sms to it?

Regards

Sherry

like image 355
sherry Avatar asked Feb 14 '11 14:02

sherry


People also ask

How do I select a contact list on Android contacts?

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

How do I add phone numbers to my call list?

How do I add my number to the Registry? Go to DoNotCall.gov or call 1-888-382-1222 (TTY: 1-866-290-4236) from the phone you want to register. It's free.


2 Answers

phew, it took me some time, but i think i have the answer you need (even if it's too late already, but i'll still post it as a reference for others).

in the application i'm currently developing the user may enter a phone number into an EditText or click on a button and select a person from the phones address book. if the person has more than one phone number, there's a drop down list where he can select exactly one of them.

@Override protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.contact_picker);      // this opens the activity. note the  Intent.ACTION_GET_CONTENT     // and the intent.setType     ((Button)findViewById(R.id.pick_person)).setOnClickListener( new OnClickListener() {         @Override         public void onClick(View v) {             // user BoD suggests using Intent.ACTION_PICK instead of .ACTION_GET_CONTENT to avoid the chooser             Intent intent = new Intent(Intent.ACTION_GET_CONTENT);             // BoD con't: CONTENT_TYPE instead of CONTENT_ITEM_TYPE             intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);             startActivityForResult(intent, 1);                         }     }); } 

now, as soon as the user selects a contact (and probably chooses one of several phone numbers), you can retrieve the data the normal way:

@Override protected 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, new String[]{                              ContactsContract.CommonDataKinds.Phone.NUMBER,                               ContactsContract.CommonDataKinds.Phone.TYPE },                         null, null, null);                  if (c != null && c.moveToFirst()) {                     String number = c.getString(0);                     int type = c.getInt(1);                     showSelectedNumber(type, number);                 }             } finally {                 if (c != null) {                     c.close();                 }             }         }     } }  public void showSelectedNumber(int type, String number) {     Toast.makeText(this, type + ": " + number, Toast.LENGTH_LONG).show();       } 

here's the documentation for CommonDataKinds.Phone for on dev.android.

the int "type" tells you the type of number: mobile (2), home (1), work (3), and so on.

note: after the user selects the contact, he gets a spinner of numbers with no indication of the numbers type. that's not really user friendly: if a contact has 5 assigned numbers ... uh, which one of these is the fax number again?

another note: above example needs the sdk > 5 (Android 2.0+), so no 1.6 (=sdk 4). 1.6 has a different api, and if you want to support both versions, read the article about the contacts API on dev.android.

good luck.

disclaimer: i copied most of my code out of the PickContact.java example

like image 71
stefs Avatar answered Sep 21 '22 22:09

stefs


this code just work fine with me

@Override public void onClick(View arg0) {     // TODO Auto-generated method stub      Intent i = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);     super.startActivityForResult(i, 1001); }  @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {     // TODO Auto-generated method stub     super.onActivityResult(requestCode, resultCode, data);      switch (requestCode) {     case 1001:          if (resultCode == Activity.RESULT_OK) {              Cursor s = getContentResolver().query(Phone.CONTENT_URI, null,                     null, null, null);          if (s.moveToFirst()) {                 String phoneNum = s.getString(s.getColumnIndex(Phone.NUMBER));                 Toast.makeText(getBaseContext(), phoneNum, Toast.LENGTH_LONG).show();                             }          }          break;      }  } 
like image 28
Shadi Avatar answered Sep 21 '22 22:09

Shadi