如何检查特定的CallerID是否在联系人列表中?

时间:2012-08-29 01:28:29

标签: android contacts

我试图找出来电者ID是否在联系人列表中。所以我正在使用的代码:

    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常量的右列名称。之前在这里问了一个类似的问题:How to read contacts on Android 2.0我跟着它。

1 个答案:

答案 0 :(得分:0)

此表中没有电话号码。您应该从其他地方查询它。 这是快速的划痕(我相信有更好的方法):

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