2011-09-26 31 views
2

我有一個HTC legend。在它的手機通訊錄中顯示4-5 contacts.But當我在我的應用程序中查詢它顯示接近45個contacts.I認爲它的gmail聯繫人。ContactsContract API中的問題android

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

光標光標= managedQuery(ContactsContract.Contacts.CONTENT_URI,投影,NULL,NULL,NULL);

我得到的所有照片以及在列表視圖的細節。現在,我需要得到特別的聯繫方式像所有他的電話號碼,電子郵件,照片etc.For這個我寫此查詢

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); 

我收到電話聯繫的所有細節但不是所有其他聯繫人。 我已經讀過所有這些細節存儲在共享表(ContactsContract.Data.CONTENT_URI),但我沒有得到確切的做什麼去做到這一點。

有人可以幫我弄清楚如何做到這一點。

感謝

回答

3

你可以這樣做:

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); 

下一個迭代通過遊標,並首先閱讀MIME類型:

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

,並取決於MIME類型讀取相應的數據類型:

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

等。

+0

感謝Stipa答案。 – Rishi

+0

非常有用,適合像我這樣懶惰的開發者。 –