Как я могу запросить контактную информацию по номеру телефона
Я пытаюсь запросить контактную информацию на основе номера телефона на 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);
У вас есть идея, почему она не работает?
Спасибо.
2 ответа
Вы можете указать 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
}
Телефонные номера хранятся в отдельной таблице и должны запрашиваться отдельно. Для запроса таблицы телефонных номеров используйте URI, хранящийся в переменной SDK Contacts.Phones.CONTENT_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. Поскольку база данных контактов Android может хранить несколько телефонных номеров для каждого контакта, нам необходимо просмотреть возвращаемые результаты. Помимо возврата номера телефона, в запросе также указывается тип номера (домашний, рабочий, мобильный и т. Д.).
Также ознакомьтесь с этим руководством по работе с API контактов Android для версии 1.6 и раньше.