9

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

Для каждого контакта имеется другой набор информации, например, в нескольких контактах у меня есть электронная почта, но для нескольких контактов ее нет.

Мои вопросы

  1. Как я могу получить всю информацию о данном контакте не пропустив ни одного bit.Is там структуру, я могу траверс и проверить значение для каждого ключа?

  2. Также, когда я заполняю системные контакты в своем списке приложений, я нахожу один и тот же контакт несколько раз в списке. Я думаю, это связано с тем, что в диспетчере учетных записей моего устройства такой же номер зарегистрирован для многих учетных записей, таких как whatsapp, gmail. Если да, то как отобразить этот номер только один раз в моем списке.

ответ

1

Здесь вы можете сделать. вы будете иметь ваш contactid так основывают на том, что вы можете сохранить данные, как номера телефонов, сообщения электронной почты в вашем пользовательского объекта и использования этого объекта для отображения сведений

пользовательского класса подобно ::

class Contact{ 
int contactId; 
String Name; 
ArrayList<Phone> phone; 
ArrayList<Email> emails; 
} 

class Phone{ 
String PhoneType; 
String number; 

} 

class Email{ 
String type; 
String EmailId; 

} 

Retieve детали и добавить его в свой пользовательский класс:

ContentResolver cr = getContentResolver(); 
    Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
     "DISPLAY_NAME = '" + NAME + "'", null, null); 
    if (cursor.moveToFirst()) { 
     String contactId = 
      cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
     // 
     // Get all phone numbers. 
     // 
     Cursor phones = cr.query(Phone.CONTENT_URI, null, 
      Phone.CONTACT_ID + " = " + contactId, null, null); 
     while (phones.moveToNext()) { 
      String number = phones.getString(phones.getColumnIndex(Phone.NUMBER)); 
      int type = phones.getInt(phones.getColumnIndex(Phone.TYPE)); 
      switch (type) { 
       case Phone.TYPE_HOME: 
        // do something with the Home number here... 
        break; 
       case Phone.TYPE_MOBILE: 
        // do something with the Mobile number here... 
        break; 
       case Phone.TYPE_WORK: 
        // do something with the Work number here... 
        break; 
       } 
     } 
     phones.close(); 
     // 
     // Get all email addresses. 
     // 
     Cursor emails = cr.query(Email.CONTENT_URI, null, 
      Email.CONTACT_ID + " = " + contactId, null, null); 
     while (emails.moveToNext()) { 
      String email = emails.getString(emails.getColumnIndex(Email.DATA)); 
      int type = emails.getInt(emails.getColumnIndex(Phone.TYPE)); 
      switch (type) { 
       case Email.TYPE_HOME: 
        // do something with the Home email here... 
        break; 
       case Email.TYPE_WORK: 
        // do something with the Work email here... 
        break; 
      } 
     } 
     emails.close(); 
    } 
    cursor.close(); 

надеюсь, что это поможет

+0

вы хорошо освещали имя, номер телефона и адрес электронной почты, но есть и другие поля а также в контакте, когда я просил способ разобрать все данные, принадлежащие данному контакту. Например, адресная часть в устройствах Android включает в себя Улица, Город, Почтовый индекс и страна. Могут быть другие поля, такие как веб-адрес, организация, заметки, NickName, Relationship. также такие события, как дни рождения. Теперь, если контакт несет всю эту информацию, как я могу ее получить. Это был мой первый вопрос. –

+0

Этот фрагмент - это просто пример того, как вы можете покрывать детали в своем пользовательском классе. так что только вам придется поместить все детали в свой собственный класс и создать отдельный пользовательский класс в соответствии с данными, такими как nickname, relationship и т. д .; вы получите все KEY_CONSTANTS для всех деталей, которые вам нужны только от контакта. вам нужно добавить его только в свой пользовательский класс. надеюсь, эта идея поможет вам. счастливое кодирование. – KDeogharkar

0

может быть, этот метод поможет вам:

public void getAllContacts() { 


    //region searchlist 
    ArrayList<SearchResult> results = new ArrayList<>(); 

    ContentResolver cr = SearchFragment.this.getActivity().getContentResolver(); 
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
    if (cur == null) 
     return; 
    if (cur.getCount() < 1) 
     return; 

    while (cur.moveToNext()) { 
     String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
     String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
     SearchResult temp = new SearchResult(); 
     temp.name = name; 
     if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 
      Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id}, null); 
      if (pCur == null) 
       continue; 
      // i need last phone number but you can add all numbers tu list in while loop 
      while (pCur.moveToNext()) { 
       temp.phone = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      } 
      pCur.close(); 
     } else { 
      continue; 
     } 
     String strUri = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_URI)); 
     Uri tempUri = null; 
     if (strUri != null) 
      tempUri = Uri.parse(strUri); 
     if (tempUri != null) 
      temp.imageUri = tempUri; 
     else 
      //temp.profilePicture = getActivity().getResources().getDrawable(R.drawable.profile); 
      results.add(temp); 
      } 
//all you want is here in results 
    allContacts = results; 

    //searchListAdapter.addAll(allContacts); 
    //listSearch.setAdapter(searchListAdapter); 
    //listSearch.setOnItemClickListener(onItemClickListener); 
    //searchListAdapter.notifyDataSetChanged(); 

    //endregion 


} 
0

Ответ на Q1:

Обратитесь к открытому исходному коду "пакеты/приложениям/ContactsCommon" пакету в AOSP. У этого есть код, чтобы прочитать полные данные контакта и загрузить его в структуру данных. Это используется экранными экранами Android для отображения информации. Вы можете повторно использовать одну и ту же библиотеку, не заново изобретая колесо.

Ответа на этот вопрос Q2: В идеале, такие контакты должны соединяться по умолчанию с андроидной логикой, и ваш список должен отображать агрегированные контакты, а не сырые контакты.

Есть несколько ответов, доступных для этого, если вы хотите, чтобы удалить дубликаты из совокупного списка, который андроид не сумел агрегировать: примера: how to remove duplicate contact from contact list in android

 Смежные вопросы

  • Нет связанных вопросов^_^