14

私は電話からwhatsappの連絡先を取得しようとしていると私はwhatsapp連絡先の総数を得るが、RawContactsからwhatsappを取得する方法番号と私は知らない名前。私は解決策を見つけようとしましたが、そのための正確な解決策を得ることはできません。私を助けてください。Androidからwhatsapp連絡先を取得するには?

私は以下のコードを書いています。私は私の質問の解決策を発見した

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の連絡先データストアの図を理解しよう接触の流れ全体を理解する。スニペットの下に、3つの層のデータモデル図が示されています。ここ

コードスニペット

//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の連絡先データストアダイアグラム enter image description here

+0

偉大な説明です! – activesince93

+0

各テーブルの目的は何ですか?ここに示すように、アプリケーションが挿入したデータをどこで見つけることができますか?また、その意図を使うことができますか?http://stackoverflow.com/q/35992096/878126? –

+0

テレグラムの連絡先や他のアプリと一緒に使えますか? – Webserveis

関連する問題