【问题标题】:How to get whatsapp Contacts from Android Programmatically?如何以编程方式从 Android 获取 whatsapp 联系人?
【发布时间】:2016-05-28 15:48:03
【问题描述】:

我必须尝试从电话中获取 WhatsApp 联系人,并且我得到了 WhatsApp 联系人的总数,但是从 RawContacts 如何获取我不知道的 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());

【问题讨论】:

    标签: android contacts android-contacts whatsapp android-contentresolver


    【解决方案1】:

    我找到了我的问题的解决方案,所以我把我的答案放在这里..可能对其他人有用..

    首先阅读并尝试理解 Android Contacts Data Store 的图表,然后很容易理解整个联系流程。 sn-ps下面给出了三层数据模型图。

    代码片段

    //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 联系人数据存储图

    【讨论】:

    • 很好的解释!
    • 每个表格的用途是什么?我在哪里可以找到应用程序插入的数据,也可以使用它们的意图,如下所示:stackoverflow.com/q/35992096/878126
    猜你喜欢
    • 2015-03-15
    • 2023-04-08
    • 2017-09-07
    • 2023-02-02
    • 2012-08-12
    • 1970-01-01
    • 2016-12-26
    • 2014-01-03
    • 1970-01-01
    相关资源
    最近更新 更多