如何通过编程方式从Android获取whatsapp联系人?
我必须尝试从电话中获取WhatsApp联系人,我得到了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
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联系人数据存储图
很好的解释!每张桌子的用途是什么?我在哪里可以找到应用程序插入的数据,也可以使用它们的意图,如下所示:?