2012-08-29 41 views
0

我想知道如果來電顯示在通訊錄中。因此,代碼我使用的爲:如何檢查特定的CallerID是否在聯繫人列表中?

ContentResolver resolver = this.service.getContentResolver(); 
    String number = PhoneLookup.NUMBER; 
    String[] projections = { number }; 
    String selectionClause = number + " = ?"; 
    String[] selectionClauseArgs = { callerId }; 
    Cursor people = resolver.query(
      ContactsContract.Contacts.CONTENT_URI, projections, 
      selectionClause, selectionClauseArgs, null); 
    return people.getCount() > 0 ? true : false; 

我給過濾功能的ContentResolver本身,而不是獲取的一切,遍歷它們並檢查一個接一個。

但我收到以下錯誤的東西的原因(有許多代碼,但他們工作得很好,因爲他們只是訂閱電話事件,以接收來電顯示時,有一個人是打電話!「)

08-28 19:20:05.903: E/AndroidRuntime(737): java.lang.IllegalArgumentException: Invalid column number 

我沒有什麼是無效的,我用正確的列名這是PhoneLookup.NUMBER常數A類似的問題在這裏問過:。How to read contacts on Android 2.0我跟着

回答

0

有沒有電話號碼,在此表中應該從另一個地方查詢它 這裏是fas t劃痕(我相信有更好的方式來做到這一點):

boolean hasPhoneNumber = (people.getInt(people.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)) > 0); 
     if (hasPhoneNumber) { 
      String id = people.getString(people.getColumnIndex(ContactsContract.Contacts._ID)); 
      String num = getNumber(id); 
     } 


public String getNumber(String id) { 
    String number = null; 
    String name = null; 
    Cursor pCur = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
      ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id }, null); 
    if (pCur.moveToFirst()) { 
     number = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
     name = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
    } 
    pCur.close(); 
    return number; 
} 
+0

我相信'people'是一個'Cursor'對象,但是它的參數被填充? – Tarik

+0

而且我還記得這個代碼的地方。如果你把源頁面的鏈接放到了代碼的其餘部分,那會更好。 – Tarik

+0

'人們'用空值查詢,意味着它與全部領域的每一次接觸。代碼來自github,但我失去了鏈接,對不起:) –

相關問題