我正在尝试根据Android 1.6上的电话号码查询联系信息。这是我试过的代码。但是我的光标中的计数等于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 :(得分: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
}
答案 1 :(得分: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中的Cursor。由于Android联系人数据库可以为每个联系人存储多个电话号码,因此我们需要循环返回结果。除了返回电话号码外,查询还返回了号码类型(家庭,工作,移动等)。
另请阅读本教程关于Working With Android Contacts API For 1.6 and Before
的内容