#android #contacts
#Android #Контакты
Вопрос:
У меня возникла проблема с получением имени контакта из контактов. Я создаю приложение для отправки SMS, и, как вы знаете, когда вы получаете SMS, номер, который вы получаете, приходит с кодом страны, но если тот же номер, который вы сохранили в своей памяти, без кода страны, как бы вы его нашли?
Я могу получить номер, если он сохранен с кодом страны, но не могу, если он сохранен без кода страны.
Вот мой код:
String[] projection = new String[] {
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER };
// encode the phone number and build the filter URI
Uri contactUri = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, Uri.encode(number));
// query time
Cursor c = getContentResolver().query(contactUri, projection, null,
null, null);
// if the query returns 1 or more results
// return the first result
if (c.moveToFirst()) {
String name = c.getString(c
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
return name;
}
// return the original number if no match was found
return number;
Ответ №1:
Вы должны попробовать использовать SQLite LIKE в своем выборе. Я не тестировал это, но вы поймете идею. Метод принимает номер (адрес) из SMS и пытается сопоставить его с номером с телефона.НОМЕР.
private void whateverYouCallMe(String numberWithCode) {
String[] projection = new String[] {
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER };
String selection = Phone.NUMBER " LIKE '%?%'" // numberWithCode should supplement the ?
final String[] SELECTION_ARGS = { numberWithCode };
Cursor c = getContentResolver().query(contactUri, projection, selection, SELECTION_ARGS, null);
//etc
}
Комментарии:
1. я пробовал это, но все еще безрезультатно. должен ли я использовать запрос с помощью или opertaor. запрашивать номер с кодом и без кода?..
2. черт, я забыл добавить аргументы выбора. Добавлено сейчас
3. Теперь у меня сбой из-за этого аргумента выбора. вы не указали оператор ContactURI. я добавил этот Uri contactUri = Uri.С добавленным путем (ContactsContract. Общие ссылки. Телефон. CONTENT_FILTER_URI, Uri.encode(номер)); и я получаю ошибку: привязка или индекс столбца вне диапазона.
4. Я думаю, вам нужно использовать ContactsContract. Общие ссылки. Телефон. CONTENT_URI
5. получил рабочий ответ, изменив строку на «НРАВИТСЯ?» вместо «НРАВИТСЯ’%?%'»