14

Ho provato ad ottenere il contatto di whatsapp dal telefono e ottengo il conteggio totale del contatto whatsapp ma da RawContacts come ottenere whatsapp Numero e nome che non conosco. ho provato a trovare la soluzione ma non riesco a ottenere la soluzione esatta per questo. Mi aiuti per favore.Come ottenere contatti whatsapp da Android?

Ho inserito il mio codice qui sotto.

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()); 

risposta

38

ho trovato Soluzione della mia domanda così ho messo la mia risposta qui .. può essere utile per gli altri ..

prima leggere e cercare di capire schema di contatti Android Data Store, dopo che è facile per capire l'intero flusso di contatti. Il diagramma del modello di dati a tre livelli è riportato sotto i frammenti.

Frammenti di codice

//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()); 

qui è lo spettacolo Android Contact Data Store Diagramma enter image description here

+0

grande spiegazione! – activesince93

+0

Qual è lo scopo di ciascuna tabella? Dove posso trovare i dati che le app hanno inserito e anche essere in grado di utilizzare i loro intenti, come mostrato qui: http://stackoverflow.com/q/35992096/878126? –

+0

funziona con i contatti del telegramma e altre app? – Webserveis