How to get Specific Contact Number by using Contact Id
Asked Answered
R

5

8

Here my Contact names are Displayed on List View . By clicking the List I get ContactName and Contact Id. From that I want to fetchPhone number by Using either Contact ID or Contact name,Please Help me.

Here is My Code

void ReadContacts(String sort) {
    final Uri uri = ContactsContract.Contacts.CONTENT_URI;
    final String[] projection = new String[] {
            ContactsContract.Contacts._ID,
            ContactsContract.Contacts.DISPLAY_NAME
    };
    //boolean mShowInvisible = false;
    String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'";
    String[] selectionArgs = null;
    final String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";

    m_curContacts = managedQuery(uri, projection, selection, selectionArgs, sortOrder);
    String[] fields = new String[] {ContactsContract.Data.DISPLAY_NAME};
    m_slvAdapter = new SimpleCursorAdapter(this, 
                android.R.layout.simple_list_item_1, 
                m_curContacts,
                fields, 
                new int[] {android.R.id.text1});
    m_slvAdapter.setFilterQueryProvider(new FilterQueryProvider() {

        public Cursor runQuery(CharSequence constraint) {
            Log.d(LOG_TAG, "runQuery constraint:"+constraint);
            String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'" +
                    " AND "+ ContactsContract.Contacts.DISPLAY_NAME + " LIKE '%"+constraint+"%'";
            String[] selectionArgs = null;//new String[]{"'1'"};//, };
            Cursor cur = managedQuery(uri, projection, selection, selectionArgs, sortOrder);
            return cur;
        }

   });
   m_lvContacts.setAdapter(m_slvAdapter); 
   //  cur.close();

}



public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {
    ContentResolver cr;
    Cursor cursor = (Cursor) m_lvContacts.getItemAtPosition(position);
    String szDisplayName = cursor.getString(cursor.getColumnIndexOrThrow( ContactsContract.Contacts.DISPLAY_NAME));
    String szId = cursor.getString(cursor.getColumnIndexOrThrow( ContactsContract.Contacts._ID));
    int nId = cursor.getInt(cursor.getColumnIndexOrThrow( ContactsContract.Contacts._ID));
    Log.d(LOG_TAG, "Item click:"+position+" szId:"+szId+" nId:"+nId+" Data:"+szDisplayName);
    Toast.makeText(getBaseContext(), "Item click:"+phoneNumber+" szId:"+szId+" nId:"+nId+" Data:"+szDisplayName, Toast.LENGTH_SHORT).show();

}
Resistless answered 10/3, 2012 at 7:24 Comment(3)
look here #3371128Pleuron
i used the above link but phoneindex produce o valueResistless
#3045045 try to search on SO.Such questions have already asked and you have to just arrange itPleuron
S
20

Try this one

ArrayList<String> phones = new ArrayList<String>();

Cursor cursor = mContentResolver.query(
        CommonDataKinds.Phone.CONTENT_URI, 
        null, 
        CommonDataKinds.Phone.CONTACT_ID +" = ?", 
        new String[]{id}, null);

while (cursor.moveToNext()) 
{
    phones.add(cursor.getString(cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER)));
} 

cursor.close();
return(phones);
Stethoscope answered 10/3, 2012 at 7:38 Comment(2)
i dont want list of phone number i need a particular numberResistless
Have u checked? I think It return only one numberStethoscope
I
2

Try this one

public void getNameUsingContactId(String contactId){

    String cContactIdString = ContactsContract.Contacts._ID;
    Uri cCONTACT_CONTENT_URI = ContactsContract.Contacts.CONTENT_URI;
    String cDisplayNameColumn = ContactsContract.Contacts.DISPLAY_NAME;

    String selection = cContactIdString + " = ? ";
    String[] selectionArgs = new String[]{String.valueOf(contactId)};

    Cursor cursor = mContext.getContentResolver().query(cCONTACT_CONTENT_URI, null, selection, selectionArgs, null);
    if ((cursor != null) && (cursor.getCount() > 0)) {
        cursor.moveToFirst();
        while ((cursor != null) && (cursor.isAfterLast() == false)) {
            if (cursor.getColumnIndex(cContactIdString) >= 0) {
                if (contactId.equals(cursor.getString(cursor.getColumnIndex(cContactIdString)))) {
                    String name = cursor.getString(cursor.getColumnIndex(cDisplayNameColumn));
                     break;
                }
            }
            cursor.moveToNext();
        }
    }
    if (cursor != null)
        cursor.close();  
}   
Isaiah answered 12/10, 2016 at 14:12 Comment(0)
P
0

You'll find the phonenumbers in the data table. Find the corresponding raw contact ids in the rawcontacts table (use contact ID as where criteria), use these raw contact ids to query the data table. The phonenumber will have a certain mime type (away from the docs now) so you can recognize them. Hope this helps!

Tips: copy the contacts2.db database from your emulator/device and use Squirrel (SQLite jdbc driver) to poke around in the contacts database. The db is located under /data/data/ look for contacts in the list).

Pistareen answered 10/3, 2012 at 7:35 Comment(0)
R
0

Guys I got the Answer:

Please Use this Code if you need:

  Cursor cursor = (Cursor) m_lvContacts.getItemAtPosition(position);
        String szDisplayName = cursor.getString(cursor.getColumnIndexOrThrow( ContactsContract.Contacts.DISPLAY_NAME));
        String szId = cursor.getString(cursor.getColumnIndexOrThrow( ContactsContract.Contacts._ID));
        int nId = cursor.getInt(cursor.getColumnIndexOrThrow( ContactsContract.Contacts._ID));
         long l = Long.parseLong(szId);
        int type=ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE;




 cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
         null,
         ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"='"+szId+"'",
         null, null);

            int phoneNumberIndex = cursor
                    .getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER);

            Log.d(TAG, String.valueOf(cursor.getCount()));

            if (cursor != null) {
                Log.v(TAG, "Cursor Not null");
                try {
                    if (cursor.moveToNext()) {
                        Log.v(TAG, "Moved to first");
                        Log.v(TAG, "Cursor Moved to first and checking");
                        phoneNumber = cursor.getString(phoneNumberIndex);
                        System.out.println("HAGSd"+phoneNumber);
                    }
                } finally {
                    Log.v(TAG, "In finally");
                    cursor.close();
                }
Resistless answered 11/3, 2012 at 10:41 Comment(0)
F
0
public static final String contactIdByPhoneNumber(Context ctx, String phoneNumber) {
    String contactId = null;
    if (phoneNumber != null && phoneNumber.length() > 0) {
        ContentResolver contentResolver = ctx.getContentResolver();

        Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));

        String[] projection = new String[] { PhoneLookup._ID };

        Cursor cursor = contentResolver.query(uri, projection, null, null, null);

        if (cursor != null) {
            while (cursor.moveToNext()) {
                contactId = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup._ID));
            }
            cursor.close();
        }
    }
    return contactId;
}
Foldboat answered 2/6, 2016 at 10:57 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.