In this blog I will describe how to access or read Conatcts/Phonebook in your Android Application.
Contacts are stored in separate tables(in Row and Column form)
Here variable personName will contain the name and number will contain the phone number of the Contact
Cursor c1;
// list Columns to retive , pass null to get all the columns
String col[]={ContactsContract.Contacts._ID,ContactsContract.Contacts.DISPLAY_NAME};
c1 = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, col, null, null, ContactsContract.Contacts.DISPLAY_NAME);
String personName = null, number = "";
if(c1==null)
return;
// Fetch the Corresponding Phone Number of Person Name
try
{
if(c1.getCount() > 0)
{
while(c1.moveToNext())
{
String id = c1.getString(c1.getColumnIndex(Contacts._ID));
personName = c1.getString(c1.getColumnIndex(Contacts.DISPLAY_NAME));
if(id==null||personName==null)
continue;
Cursor cur = mContext.getContentResolver().query(CommonDataKinds.Phone.CONTENT_URI, null, CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{id}, null);
if(cur==null)
continue;
number = "";
while(cur.moveToNext())
{
number = cur.getString(cur.getColumnIndex(CommonDataKinds.Phone.NUMBER));
}
cur.close();
}
}
}
catch(Exception e)
{
}
finally
{
c1.close();
}
Contacts are stored in separate tables(in Row and Column form)
ContactsContract
ContactsContract defines an extensible database of contact-related
information. Contact information is stored in a three-tier data model:
-
A row in the
ContactsContract.Data
table can store any kind of personal data, such as a phone number or email addresses. The set of data kinds that can be stored in this table is open-ended. There is a predefined set of common kinds, but any application can add its own data kinds. -
A row in the
ContactsContract.RawContacts
table represents a set of data describing a person and associated with a single account (for example, one of the user's Gmail accounts). -
A row in the
ContactsContract.Contacts
table represents an aggregate of one or more RawContacts presumably describing the same person. When data in or associated with the RawContacts table is changed, the affected aggregate contacts are updated as necessary.
Here variable personName will contain the name and number will contain the phone number of the Contact
Code to read/access the contacts
Cursor c1;
// list Columns to retive , pass null to get all the columns
String col[]={ContactsContract.Contacts._ID,ContactsContract.Contacts.DISPLAY_NAME};
c1 = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, col, null, null, ContactsContract.Contacts.DISPLAY_NAME);
String personName = null, number = "";
if(c1==null)
return;
// Fetch the Corresponding Phone Number of Person Name
try
{
if(c1.getCount() > 0)
{
while(c1.moveToNext())
{
String id = c1.getString(c1.getColumnIndex(Contacts._ID));
personName = c1.getString(c1.getColumnIndex(Contacts.DISPLAY_NAME));
if(id==null||personName==null)
continue;
Cursor cur = mContext.getContentResolver().query(CommonDataKinds.Phone.CONTENT_URI, null, CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{id}, null);
if(cur==null)
continue;
number = "";
while(cur.moveToNext())
{
number = cur.getString(cur.getColumnIndex(CommonDataKinds.Phone.NUMBER));
}
cur.close();
}
}
}
catch(Exception e)
{
}
finally
{
c1.close();
}
Hello
ReplyDeleteIs it possible to know when a user is accessing contacts? i.e are there any broadcast message issued when user accesses contacts?
No broadcast message is sent when user access contacts.
DeleteCan you please tell what is "mContext" in your code
ReplyDeletejust remove mContext
DeleteHi,
ReplyDeleteThanks for sharing the information with us it was very informative. Hangup.in