如何以编程方式从Android获取whatsapp联系人?

曼苏克·阿希尔

我已经尝试从电话获取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数据存储的图表,然后很容易理解整个联系人流程。片段下方给出了三层数据模型图。

代码段

//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联系人数据存储图 在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何以编程方式创建帐户和联系人?

如何以编程方式解析联系人.vcf文件?

如何以编程方式在android 10中恢复已删除的联系人

如何以编程方式将我的应用程序设置为 android 中的联系人默认应用程序

如何以编程方式在Outlook中访问共享邮箱的联系人通讯簿

如何以编程方式删除iOS中的多个通讯录联系人?

如何使用android中的联系号码以编程方式删除本机联系人?

如何以编程方式在Android中的联系人中添加后缀名称

以编程方式更新android联系人的电子邮件

以编程方式请求访问联系人

以编程方式编辑联系人姓名

如何从联系人获取联系人图像URL?

搜索联系人并从android中的电话联系人获取联系人号码

Android-如何获取已保存的联系人ID

如何从 Android 联系人中的联系人 ID 中获取只读帐户名称

保存Android联系人后获取联系人ID

在iOS中,WhatsApp如何更快地从通讯录中获取更新的联系人?

以编程方式更新android中的联系人姓名和电话号码

以编程方式将Android应用程序与联系人/电话簿链接

Android-同步联系人以编程方式添加到Google帐户

Android 11 获取联系人的生日

android获取所有联系人

在Android中获取并选择联系人

是否可以以编程方式更新紧急联系人?

如何使用 LOOKUP KEY 在 android 中检索联系人的联系方式?

如何从 CONTENT URI 获取联系人

如何从Android应用程序通过WhatsApp向特定联系人发送消息?

从Android应用程序打开Whatsapp联系人列表

Android如何通过我的通话记录联系人电话号码获取联系人ID