Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过编程方式从Android获取whatsapp联系人?_Android_Contacts_Android Contacts_Whatsapp_Android Contentresolver - Fatal编程技术网

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

如何通过编程方式从Android获取whatsapp联系人?,android,contacts,android-contacts,whatsapp,android-contentresolver,Android,Contacts,Android Contacts,Whatsapp,Android Contentresolver,我必须尝试从电话中获取WhatsApp联系人,我得到了WhatsApp联系人的总数,但从RawContacts如何获取我不知道的WhatsApp号码和姓名。我试图找到一个解决方案,但无法得到确切的解决方案。请帮帮我 我把代码放在下面。 ContentResolver cr = context.getContentResolver(); Cursor c = cr.query( ContactsContract.RawContacts.CONTEN

我必须尝试从电话中获取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());
ContentResolver cr=context.getContentResolver();
游标c=cr.query(
Contacts contract.raw contacts.CONTENT\u URI,
新字符串[]{ContactsContract.RawContacts.CONTACT\u ID,ContactsContract.RawContacts.DISPLAY\u NAME\u PRIMARY},
Contacts contract.raw contacts.ACCOUNT_TYPE+“=?”,
新字符串[]{“com.whatsapp”},
无效);
ArrayList myWhatsappContacts=新建ArrayList();
字符串投影[]={ContactsContract.CommonDataTypes.Phone.NUMBER};
如果(c!=null){
如果(c.getCount()>0){
while(c.moveToNext()){
String whatsappContactId=c.getString(c.getColumnIndex(ContactsContract.RawContacts.Data._ID));
游标数据游标=cr.query(
ContactsContract.CommonDataTypes.Phone.CONTENT\u URI,
投影,
ContactsContract.CommonDataTypes.Phone.CONTACT_ID+“=?”,
新字符串[]{whatsappContactId},空);
//您还可以读取RawContacts.CONTACT\u ID以读取
//Contacts合同。Contacts表或任何其他相关表。
String number=dataCursor.getString(dataCursor.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NORMALIZED_number));
myWhatsappContacts.add(数字);
}
}
}
showLogI(标记“WhatsApp联系人大小:”+MyWhatsApp联系人.size());

我找到了问题的答案,所以我把答案放在这里。。祝它对别人有用

首先阅读并尝试理解Android联系人数据存储的图表,然后很容易理解整个联系人流程。代码片段下面给出了三层数据模型图

代码片段

//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());
//此类提供应用程序对内容模型的访问。
ContentResolver cr=context.getContentResolver();
//筛选帐户类型的行联系人
Cursor contactCursor=cr.query(
Contacts contract.raw contacts.CONTENT\u URI,
新字符串[]{ContactsContract.RawContacts.\u ID,
Contacts contract.raw contacts.CONTACT\u ID},
Contacts contract.raw contacts.ACCOUNT_TYPE+“=?”,
新字符串[]{“com.whatsapp”},
无效);
//商店Whatsapp联系人的ArrayList
ArrayList myWhatsappContacts=新建ArrayList();
如果(contactCursor!=null){
如果(contactCursor.getCount()>0){
if(contactCursor.moveToFirst()){
做{
//whatsappContactId用于从ContactsContract.CommonDataTypes.Phone获取号码、姓名、Id等
String whatsappContactId=contactCursor.getString(contactCursor.getColumnIndex(ContactsContract.RawContacts.CONTACT_ID));
如果(whatsappContactId!=null){
//从ContactsContract.CommonDataTypes.Phone获取特定联系人ID的数据
Cursor whatsAppContactCursor=cr.query(
ContactsContract.CommonDataTypes.Phone.CONTENT\u URI,
新字符串[]{ContactsContract.CommonDataTypes.Phone.CONTACT_ID,
Contacts contract.CommonDataTypes.Phone.NUMBER,
ContactsContract.CommonDataTypes.Phone.DISPLAY\u NAME},
ContactsContract.CommonDataTypes.Phone.CONTACT_ID+“=?”,
新字符串[]{whatsappContactId},空);
if(whatsAppContactCursor!=null){
whatsAppContactCursor.moveToFirst();
String id=whatsAppContactCursor.getString(whatsAppContactCursor.getColumnIndex(ContactsContract.CommonDataTypes.Phone.CONTACT_id));
String name=whatsAppContactCursor.getString(whatsAppContactCursor.getColumnIndex(ContactsContract.CommonDataTypes.Phone.DISPLAY_name));
String number=whatsAppContactCursor.getString(whatsAppContactCursor.getColumnIndex(ContactsContract.CommonDataTypes.Phone.number));
whatsAppContactCursor.close();
//将数字添加到ArrayList
myWhatsappContacts.add(数字);
showLogI(标签“WhatsApp联系人id:+id”);
showLogI(标签“WhatsApp联系人姓名:”+姓名);
showLogI(标签“WhatsApp联系人号码:”+号码);
}
}
}while(contactCursor.moveToNext());
contactCursor.close();
}
}
}
showLogI(标记“WhatsApp联系人大小:”+MyWhatsApp联系人.size());
以下是显示Android联系人数据存储图

很好的解释!每张桌子的用途是什么?我在哪里可以找到应用程序插入的数据,也可以使用它们的意图,如下所示:?