2010-07-14 109 views
1

我想查詢基於Android 1.6上的電話號碼的聯繫信息。這是我試過的代碼。但是在我的光標中,我得到count等於0。我如何查詢基於電話號碼的聯繫信息

String selection = "PHONE_NUMBERS_EQUAL(" + People.Phones.NUMBER + " , " + phoneNumber + ")"; 
    Cursor cursor = mContext.getContentResolver().query(People.CONTENT_URI, 
      new String[] {People._ID, People.NAME, People.Phones.NUMBER}, 
      selection, null, null); 

你知道爲什麼它不起作用嗎?

謝謝。

+0

的重複[有沒有一種簡單的方法來檢查,如果來話主叫方是聯繫在Android?](http://stackoverflow.com/questions/2193664/is-there-a-simple-way-to-check-if-an-incoming-caller-is-a-contact-in-android) – 2010-12-18 18:26:46

回答

4

您可以指定一個URI並使用查詢直接拿到電話號碼的聯繫人信息..

Uri contactUri = Uri.withAppendedPath(Contacts.Phones.CONTENT_FILTER_URL, Uri.encode(phoneNumber)); 

Cursor cursor = mContext.getContentResolver().query(contactUri, null, null, null, null); 

通過上面的代碼返回的光標會那麼包含你正在尋找的接觸,你可以得到你所需要的信息了...

if(cursor.moveToFirst()){ 
    int personIDIndex = cursor.getColumnIndex(Contacts.Phones.PERSON_ID); 
    //etc 
} 
+0

這是查詢聯繫人的最簡單方法。我做了很多研究,發現了很多方法來做到這一點,但這是迄今爲止最簡單的方法。謝謝! – Nick 2013-08-29 04:48:43

1

電話號碼存儲在自己的表中,需要單獨查詢。要查詢電話號碼錶,請使用存儲在SDK變量Contacts.Phones.CONTENT_URI中的URI。使用WHERE條件來獲取指定聯繫人的電話號碼。

if (Integer.parseInt(cur.getString(
     cur.getColumnIndex(People.PRIMARY_PHONE_ID))) > 0) { 
    Cursor pCur = cr.query(
      Contacts.Phones.CONTENT_URI, 
      null, 
      Contacts.Phones.PERSON_ID +" = ?", 
      new String[]{id}, null); 
    int i=0; 
    int pCount = pCur.getCount(); 
    String[] phoneNum = new String[pCount]; 
    String[] phoneType = new String[pCount]; 
    while (pCur.moveToNext()) { 
     phoneNum[i] = pCur.getString(
          pCur.getColumnIndex(Contacts.Phones.NUMBER)); 
     phoneType[i] = pCur.getString(
          pCur.getColumnIndex(Contacts.Phones.TYPE)); 
     i++; 
    } 
} 

查詢電話表並獲取存儲在pCur中的光標。由於Android聯繫人數據庫可以爲每個聯繫人存儲多個電話號碼,因此我們需要遍歷返回的結果。除了返回電話號碼以外,查詢還返回了數字類型(家庭,工作,手機等)。

而且閱讀本教程的Working With Android Contacts API For 1.6 and Before