2015-06-23 88 views
-1

您好我目前正在尝试与我正在处理的应用程序实施WhatsApp。我希望能够显示用户连同其电话号码的所有WhatsApp联系人。到目前为止,我已经能够获得他们的WhatsApp联系人的姓名,但是我一直无法获取他们的WhatsApp联系人的电话号码,下面是我用来获取用户WhatsApp联系人列表的代码。如何获取什么应用联系人的电话号码

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,任何人都可以帮我请。

感谢

+0

我可以把显示的完整代码的上课? –

+0

试图使用'DatabaseUtils.dumpCursor()'作为外部游标?用于测试更改投影参数('new String [] {ContactsContract.RawContacts.CONTACT_ID,ContactsContract.RawContacts.DISPLAY_NAME_PRIMARY}')为null – pskink

+0

您是否找到解决方案?我也面临同样的问题 – NehaK

回答

0

更改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... 
        } 

而且最好是使用正确的命名约定的变量。为什么因为在这里varible name代表conatact的id。

+0

这个解决方案为你工作?让我知道!!! – Chandrakanth

0

你可以阅读具有的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); 
} 
0

使用下面的代码从电话簿中获得了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(); 
} 
相关问题