0

我试图找出来电显示是否在联系人列表中。所以我为此使用的代码:

    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 which I follow。

4

1 回答 1

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;
}
于 2012-08-29T11:21:01.180 回答