Android 如何获取什么应用程序联系人';电话号码
您好,我目前正试图用我正在开发的应用程序实现WhatsApp。我希望能够显示用户拥有的所有WhatsApp联系人及其电话号码。到目前为止,我已经能够获取他们的WhatsApp联系人的姓名,但我无法获取他们的WhatsApp联系人的电话号码,以下是我用来获取用户WhatsApp联系人列表的代码Android 如何获取什么应用程序联系人';电话号码,android,whatsapp,Android,Whatsapp,您好,我目前正试图用我正在开发的应用程序实现WhatsApp。我希望能够显示用户拥有的所有WhatsApp联系人及其电话号码。到目前为止,我已经能够获取他们的WhatsApp联系人的姓名,但我无法获取他们的WhatsApp联系人的电话号码,以下是我用来获取用户WhatsApp联系人列表的代码 cursor = cr.query(ContactsContract.RawContacts.CONTENT_URI, new String[] { ContactsContract.RawCont
cursor = 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);
int contactNameColumn = cursor.getColumnIndex(ContactsContract.RawContacts.CONTACT_ID);
while (cursor.moveToNext()) {
String name = cursor.getString(contactNameColumn);
System.out.println(name);
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] {
Integer.toString(contactNameColumn)
}, null);
while (pCur.moveToNext()) {
String phonenumber = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
System.out.println("PHONE: " + phonenumber);
}
pCur.close();
}
cursor.close();
当我打印出正确的姓名时,我会使用该id查询数据表以获取他们的电话号码,但该号码总是返回null
,有人能帮我吗
谢谢像这样更改您的
pCur
if (name != null) {
Cursor pCur = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{name}, null);
//Iterate cursor here...
}
最好对变量使用适当的命名约定。为什么呢?因为这里的变量
name
表示联系人的id。您可以通过以下内容读取所有具有whatsapp的联系人-
Cursor c = getContentResolver().query(
RawContacts.CONTENT_URI,
new String[] { RawContacts.CONTACT_ID, RawContacts.DISPLAY_NAME_PRIMARY },
RawContacts.ACCOUNT_TYPE + "= ?",
new String[] { "com.whatsapp" },
null);
ArrayList<Int> myWhatsappContacts = new ArrayList<String>();
int contactNameColumn = c.getColumnIndex(RawContacts.DISPLAY_NAME_PRIMARY);
while (c.moveToNext())
{
// You can also read RawContacts.CONTACT_ID to read the
// ContactsContract.Contacts table or any of the other related ones. String phonenumber = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
myWhatsappContacts.add(phonenumber);
}
Cursor c=getContentResolver().query(
rawscontacts.CONTENT_URI,
新字符串[]{rawscontacts.CONTACT_ID,rawscontacts.DISPLAY_NAME_PRIMARY},
RawContacts.ACCOUNT_TYPE+“=?”,
新字符串[]{“com.whatsapp”},
无效);
ArrayList myWhatsappContacts=新建ArrayList();
int contactNameColumn=c.getColumnIndex(RawContacts.DISPLAY\u NAME\u PRIMARY);
while(c.moveToNext())
{
//您还可以读取RawContacts.CONTACT\u ID以读取
//ContactsContract.Contacts表或任何其他相关表。String phonenumber=pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NUMBER));
myWhatsappContacts.add(电话号码);
}
使用以下代码从电话簿中获取带有相关WhatsApp号码的WhatsApp联系人:
private void displayWhatsAppContacts() {
final String[] projection = {
ContactsContract.Data.CONTACT_ID,
ContactsContract.Data.DISPLAY_NAME,
ContactsContract.Data.MIMETYPE,
"account_type",
ContactsContract.Data.DATA3,
};
final String selection = ContactsContract.Data.MIMETYPE + " =? and account_type=?";
final String[] selectionArgs = {
"vnd.android.cursor.item/vnd.com.whatsapp.profile",
"com.whatsapp"
};
ContentResolver cr = getContentResolver();
Cursor c = cr.query(
ContactsContract.Data.CONTENT_URI,
projection,
selection,
selectionArgs,
null);
while (c.moveToNext()) {
String id = c.getString(c.getColumnIndex(ContactsContract.Data.CONTACT_ID));
String number = c.getString(c.getColumnIndex(ContactsContract.Data.DATA3));
String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Log.v("WhatsApp", "name " +name + " - number - "+number);
}
Log.v("WhatsApp", "Total WhatsApp Contacts: " + c.getCount());
c.close();
}
我可以显示您类的完整代码吗?是否尝试使用
DatabaseUtils.dumpCursor()
作为外部游标?对于测试,将投影参数(新字符串[]{ContactsContract.RawContacts.CONTACT_ID,ContactsContract.RawContacts.DISPLAY_NAME_PRIMARY}
)更改为null找到解决方案了吗?我也面临同样的问题。你找到解决办法了吗?我也有同样的问题