我试图找出来电者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我跟着它。
答案 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;
}