Хобрук: Ваш путь к мастерству в программировании

Получить адрес в контактах с помощью Android SDK

Я пытаюсь получить имя контакта, номер телефона и адрес из списка контактов Android. Имя и телефон довольно просты, но адрес, похоже, недоступен на уровне API 1.6.

Кто-нибудь разобрался, как получить адрес контакта? Также в 2.0 есть совершенно новый API. Как я могу воспользоваться этим и вернуться к старому API, используя 1 двоичный файл. Если это вообще возможно.


Ответы:


1

До Android 2.0 вам нужно запросить Contacts.ContactMethods.CONTENT_URI, чтобы получить почтовые адреса, которые вам нужно будет передать.

Contacts.ContactMethods.PERSON_ID + "=? and " + Contacts.ContactMethods.KIND + "=?"

для выбора и для параметра selectArgs:

new String[] { personId, Integer.toString(Contacts.KIND_POSTAL) }

Начиная с версии 2.0 вы используете новый ContactsContract, который намного сложнее, потому что теперь контакт может собирать информацию из нескольких источников. Несколько хороших групповых сообщений о новом API находятся здесь и здесь.

Рекомендуемый способ нацеливания на API нескольких платформ из одного и того же двоичного файла — использование отражения (см. этот сообщение в блоге). Однако я обнаружил, что если вы нацеливаете свое приложение на 1.6 или ниже в манифесте, но устанавливаете путь сборки для получения jar-файла Android 2.0, вы можете вызывать API 2.0 без необходимости отражения. Вам просто нужно быть ОЧЕНЬ осторожным, чтобы классы, которые зависят от классов 2.0, не загружались в устройство 1.6, иначе загрузчик классов выдаст ошибку. Чтобы избежать этого, вам нужно будет использовать какую-то фабрику для разрыва зависимостей (или инфраструктуру DI, такую ​​​​как Guice). См. это сообщение для дальнейшего обсуждения.

07.12.2009

2

Спасибо Энтони Форлони (ниже) за ссылку "как читать контакты", это было полезно. Чтобы расширить содержимое этой ссылки, с помощью кода как читать "адрес", эти строки должны помочь! Они должны получать почтовый адрес, как вы видите, путем запроса с использованием констант StructuredPostal.

            Cursor postals = getContentResolver().query(
                ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,
                null,
                ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID + " = "
                        + contactId, null, null);
        int postFormattedNdx = postals.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS);
        int postTypeNdx = postals.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE);
        int postStreetNdx = postals.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET);
        while (postals.moveToNext()) {
            String postalData = postals.getString(postFormattedNdx);
            postalCat = postalCat+ postalData+ ", [";
            postalData = String.valueOf(postals.getInt(postTypeNdx));
            postalCat = postalCat+ postalData+ "], ";
            postalData = postals.getString(postStreetNdx);
            postalCat = postalCat+ postalData+ " ";
        }
        postals.close();

Остальная часть этой ссылки действительно извлекает имя и телефоны (когда вы исправляете ошибку "имеет номер телефона" для логического значения - логическое значение не анализируется должным образом)

22.10.2010

3

На моем телефоне банкомат, но здесь есть ссылка с похожим вопросом к твоему.

Я надеюсь, что это поможет или направит вас в правильном направлении.

РЕДАКТИРОВАТЬ:

Я упомянул, что отредактировал бы свой первоначальный ответ, по крайней мере, в сторону того, что вы искали, это, вероятно, очень поздно, и у вас уже есть ответ, но вот дополнительная информация, если вы все еще ищете что-то, что вам нужно искать ContactsContract.CommonDataKinds.StructuredPostal, и вы можете извлечь конкретная информация об адресе. Что касается примера использования Android 2.0, здесь показаны некоторые примеры извлечения информация от контакта, то есть если вы еще не разобрались.

Удачи.

06.12.2009
  • Это не получает адрес. Я уже могу получить его имя и номер телефона. 07.12.2009
  • э. мой плохой, я думал, что у него есть адреса, позвольте мне осмотреться и отредактировать свой ответ 07.12.2009

  • 4

    вот как я это сделал с Android 2.3.3:

                String where = ContactsContract.Data._ID + " = "
                                                         + uriData.getLastPathSegment()
                                                         + " AND ContactsContract.Data.MIMETYPE = '"
                                                         + ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE
                                                         + "'";
    
                String[] projection = new String[] { StructuredPostal.STREET,
                                                     StructuredPostal.CITY,
                                                     StructuredPostal.REGION,
                                                     StructuredPostal.POSTCODE,
                                                     StructuredPostal.COUNTRY};
    
                Cursor cursor = getContentResolver().query( ContactsContract.Data.CONTENT_URI,
                                                             projection,
                                                             where,
                                                             null,
                                                             null);
                String strOutput = "";
                if (cursor.moveToFirst())
                {
                    strOutput += "\n" + cursor.getString(0);
                    strOutput += "\n" + cursor.getString(1);
                    strOutput += "\n" + cursor.getString(2);
                    strOutput += "\n" + cursor.getString(3);
                    strOutput += "\n" + cursor.getString(4);
                } 
    
                cursor.close();
    

    ПРИМЕЧАНИЕ. uriData получается путем захвата намерения просмотреть адрес. Это решается здесь: Что связано ли намерение с просмотром рабочего адреса в контактах/карточке контакта?

    Вместо _ID попробуйте ContactsContract.Data.CONTACT_ID

    25.07.2011
  • P.S. это лучший учебник по контактам версии 2.0+, который я когда-либо видел в Интернете: higherpass .com/Android/Tutorials/Работа с Android-контактами 26.07.2011
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..