2010-06-23 64 views
3

我在查詢電話簿聯繫人時遇到問題。我需要做的是獲得一個既有電話又有電子郵件的聯繫人列表,或者是特定類型的聯繫人列表。Android聯繫人查詢

基本上是這樣的:

public static final String SELECTION = 
    "("+ContactsContract.Contacts.HAS_PHONE_NUMBER +"='1') OR " + RawContacts.ACCOUNT_TYPE + "='" + Constants.ACCOUNT_TYPE + "'"; 

現在的問題是,RawContacts.ACCOUNT_TYPE不會在ContactsContract.Contacts.CONTENT_URI,我與我的查詢中使用存在。我猜我需要加入另一張桌子,但不知道如何去做。

任何人都可以在這裏幫我,好嗎?

回答

2

讀取原始聯繫人以及與其關聯的所有數據的最佳方式是使用ContactsContract.RawContacts.Entity目錄。如果原始聯繫人具有數據行,則實體遊標將爲每個數據行包含一行。如果原始聯繫人沒有數據行,則光標仍將包含一行與原始聯繫人級別信息。

Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId); 
Uri entityUri = Uri.withAppendedPath(rawContactUri, Entity.CONTENT_DIRECTORY); 
Cursor c = getContentResolver().query(entityUri, 
      new String[]{RawContacts.SOURCE_ID, Entity.DATA_ID, Entity.MIMETYPE, Entity.DATA1}, 
      null, null, null); 
try { 
    while (c.moveToNext()) { 
     String sourceId = c.getString(0); 
     if (!c.isNull(1)) { 
      String mimeType = c.getString(2); 
      String data = c.getString(3); 
      //decide here based on mimeType, see comment later 
     } 
    } 
} finally { 
    c.close(); 
} 

您必須篩選基於將mimeType

例如,因此,如果將mimeType是Phone.CONTENT_ITEM_TYPE,則列DATA1商店的電話號碼,但如果數據善良Email.CONTENT_ITEM_TYPE,然後DATA1存儲電子郵件地址。

這樣,您將不必使用HAS_PHONE_NUMBER,因爲您將直接迭代通過項目。

1

也許因爲它包含了"vnd.android.cursor.item/email_v2" MIME類型的所有數據記錄,與相關原料接觸總聯繫人數據結合你應該使用Email.CONTENT_URI

+0

嗯......如果我使用上面的URI has_phone_number字段是未知的...... – Bostjan 2010-06-23 10:03:31