14

Я пытаюсь получить контакт с телефоном whatsapp, и я получаю общее количество контактов Whatsapp, но от RawContacts Как получить whatsapp Число и имя, которое я не знаю. я попытался найти решение, но не могу получить точное решение для этого. Пожалуйста, помогите мне.Как получить контакты Whatsapp от Android?

Я разместил свой код ниже.

ContentResolver cr = context.getContentResolver(); 

Cursor c = cr.query(
         ContactsContract.RawContacts.CONTENT_URI, 
         new String[] { ContactsContract.RawContacts.CONTACT_ID, ContactsContract.RawContacts.DISPLAY_NAME_PRIMARY }, 
         ContactsContract.RawContacts.ACCOUNT_TYPE + "= ?", 
         new String[] { "com.whatsapp" }, 
         null); 

       ArrayList<String> myWhatsappContacts = new ArrayList<>(); 

       String projection[] = { ContactsContract.CommonDataKinds.Phone.NUMBER }; 

       if(c != null) { 
        if (c.getCount() > 0) { 
         while (c.moveToNext()) { 

          String whatsappContactId = c.getString(c.getColumnIndex(ContactsContract.RawContacts.Data._ID)); 

          Cursor dataCursor = cr.query(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
            projection, 
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", 
            new String[]{whatsappContactId}, null); 
          // You can also read RawContacts.CONTACT_ID to read the 
          // ContactsContract.Contacts table or any of the other related ones. 
          String number = dataCursor.getString(dataCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER)); 
          myWhatsappContacts.add(number); 

         } 
        } 
       } 

       showLogI(TAG, " WhatsApp contact size : " + myWhatsappContacts.size()); 

ответ

38

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

сначала прочитать и попытаться понять схему Android Контакты Data Store, после того, что это легко чтобы понять весь поток контактов. Ниже приведены фрагменты кода модели с тремя уровнями.

фрагменты кода

//This class provides applications access to the content model. 
ContentResolver cr = context.getContentResolver(); 

//RowContacts for filter Account Types 
Cursor contactCursor = cr.query(
     ContactsContract.RawContacts.CONTENT_URI, 
     new String[]{ContactsContract.RawContacts._ID, 
       ContactsContract.RawContacts.CONTACT_ID}, 
     ContactsContract.RawContacts.ACCOUNT_TYPE + "= ?", 
     new String[]{"com.whatsapp"}, 
     null); 

//ArrayList for Store Whatsapp Contact 
ArrayList<String> myWhatsappContacts = new ArrayList<>(); 

if (contactCursor != null) { 
    if (contactCursor.getCount() > 0) { 
     if (contactCursor.moveToFirst()) { 
      do { 
       //whatsappContactId for get Number,Name,Id ect... from ContactsContract.CommonDataKinds.Phone 
       String whatsappContactId = contactCursor.getString(contactCursor.getColumnIndex(ContactsContract.RawContacts.CONTACT_ID)); 

       if (whatsappContactId != null) { 
        //Get Data from ContactsContract.CommonDataKinds.Phone of Specific CONTACT_ID 
        Cursor whatsAppContactCursor = cr.query(
          ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
          new String[]{ContactsContract.CommonDataKinds.Phone.CONTACT_ID, 
            ContactsContract.CommonDataKinds.Phone.NUMBER, 
            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME}, 
          ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", 
          new String[]{whatsappContactId}, null); 

        if (whatsAppContactCursor != null) { 
         whatsAppContactCursor.moveToFirst(); 
         String id = whatsAppContactCursor.getString(whatsAppContactCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID)); 
         String name = whatsAppContactCursor.getString(whatsAppContactCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
         String number = whatsAppContactCursor.getString(whatsAppContactCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

         whatsAppContactCursor.close(); 

         //Add Number to ArrayList 
         myWhatsappContacts.add(number); 

         showLogI(TAG, " WhatsApp contact id : " + id); 
         showLogI(TAG, " WhatsApp contact name : " + name); 
         showLogI(TAG, " WhatsApp contact number : " + number); 
        } 
       } 
      } while (contactCursor.moveToNext()); 
      contactCursor.close(); 
     } 
    } 
} 

showLogI(TAG, " WhatsApp contact size : " + myWhatsappContacts.size()); 

здесь показывают Android Contact Data Store Diagram enter image description here

+0

Отличное объяснение! – activesince93

+0

Какова цель каждой из таблиц? Где я могу найти данные, которые вставили приложения, а также использовать их намерения, как показано здесь: http://stackoverflow.com/q/35992096/878126? –

+0

Эта работа с контактами телеграммы и другими приложениями? – Webserveis