开发者

Problem in ContactsContract API android

i have an HTC legend.In its phone contacts it shows 4-5 contacts.But when i query it in my applicati开发者_StackOverflowon it shows nearly 45 contacts.I think its gmail contacts.

   String[] Projection = new String[] { ContactsContract.Contacts._ID, 
            ContactsContract.Contacts.DISPLAY_NAME, 
            ContactsContract.Contacts.PHOTO_ID,
            ContactsContract.Contacts.HAS_PHONE_NUMBER,
            ContactsContract.Contacts.STARRED};

Cursor cursor = managedQuery(ContactsContract.Contacts.CONTENT_URI, Projection, null, null, null);

I am getting all the details with photo as well in a listview. Now i need to get particular contact details like all his phone numbers,emails,photo etc.For this i am writing this query

    final String[] projection = new String[] {
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
            ContactsContract.CommonDataKinds.Phone.TYPE,
            ContactsContract.CommonDataKinds.Phone.NUMBER,
            ContactsContract.CommonDataKinds.Phone.IS_PRIMARY,
    };
    final Cursor phone = managedQuery(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,  
            projection,
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?",
            new String[]{contactId},
            null);
> if(phone.moveToFirst()) {
>             final int contactNumberColumnIndex =
> phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
>             final int contactTypeColumnIndex =
> phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE);

i am getting all the details of the phone contact but not all other contacts. i have read that all these details are stored in shared table(ContactsContract.Data.CONTENT_URI), but i am not getting exactly what to do go get this done.

Can someone help me figure out how to do this.

Thanks


You can do something like:

getContentResolver().query(
    RawContactsEntity.CONTENT_URI,

    // projection
    new String[] {
        BaseColumns._ID,
        RawContactsEntity.MIMETYPE,

        // DATA columns are interpreted according to MIMETYPE
        // Project only union of data columns needed
        RawContactsEntity.DATA1,
        RawContactsEntity.DATA2,
        RawContactsEntity.DATA3,
        RawContactsEntity.DATA4,
        RawContactsEntity.DATA7,
        RawContactsEntity.DATA9,
        RawContactsEntity.DATA10,
    },

    // selection
    RawContactsEntity.DELETED + "<>1 AND " + 
    RawContactsEntity.MIMETYPE + " IN ('" + 
    StructuredName.CONTENT_ITEM_TYPE + "','" + 
    Email.CONTENT_ITEM_TYPE + "','" + 
    Phone.CONTENT_ITEM_TYPE + "','" + 
    StructuredPostal.CONTENT_ITEM_TYPE + "','" + 
    Organization.CONTENT_ITEM_TYPE + "')",

    // selection params
    null,

    // sorting
    null);

Next iterate through cursor, and first read MIME type:

final String mimeType = cursor.getString(cursor.getColumnIndex(
    RawContactsEntity.MIMETYPE));

And depends on MIME type read corresponding data kind:

if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
    readNameData(cursor);
} else if (Email.CONTENT_ITEM_TYPE.equals(mimeType)) {
    addEmailData(cursor);
}

and so on.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜