Как преобразовать номер телефона в имя этого контакта в TextView на Android?

Мы хотели бы автоматически заменять номера телефонов в тексте (TextView) соответствующими именами контактов.

Есть ли библиотека или фрагмент кода, который уже делает это? Иначе мой наивный подход состоял бы в следующем:

  • получить телефонные номера в тексте (через регулярное выражение, возможно, используемое для автосвязывания телефона)
  • запрос контакта с этим номером (для каждого найденного номера)
  • если найдено, заменить на соответствующее имя контакта

(предложение по запросу от @Skynet)

В настоящее время это обсуждается в запросе функции для TextSecure, но может быть полезен для других приложений для Android. также.


person kmindi    schedule 10.03.2015    source источник
comment
Вы получаете эти номера/имена из контактов? Если это так, вам не нужно создавать регулярное выражение, просто предложение where в вашем запросе сделает за вас магию.   -  person Skynet    schedule 10.03.2015


Ответы (2)


Вам не нужно брать список всех контактов. Вы можете получить контактное имя из номера телефона. Используйте этот метод:

public static String getContactName(Context context, String phoneNumber) {
    ContentResolver contentResolver = context.getContentResolver();
    Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
    Cursor cursor = contentResolver.query(uri, new String[]{ PhoneLookup.DISPLAY_NAME }, null, null, null);
    if (cursor == null) {
        return null;
    }
    String contactName = null;
    if(cursor.moveToFirst()) {
        contactName = cursor.getString(cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME));
    }

    if(cursor != null && !cursor.isClosed()) {
        cursor.close();
    }

    return contactName;
}

Удачи.

person Batuhan Coşkun    schedule 10.03.2015

Попробуйте этот метод, чтобы получить имя контакта с помощью номера телефона:

public String getContactName(String number) {
        Uri uri = Uri.withAppendedPath(
                ContactsContract.PhoneLookup.CONTENT_FILTER_URI,
                Uri.encode(number));
        Cursor cur = context.getContentResolver().query(
                uri,
                new String[] { ContactsContract.PhoneLookup.DISPLAY_NAME,
                        ContactsContract.PhoneLookup.NUMBER,
                        ContactsContract.PhoneLookup._ID }, null, null, null);
        String contactName = "";
        if (cur.moveToNext()) {
            int name = cur
                    .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);

            contactName = cur.getString(name);

        }
        cur.close();
        return contactName;

    }

Используйте это при замене номеров на имена контактов в TextView. Надеюсь это работает. :)

person icaneatclouds    schedule 10.03.2015