2015-06-23 87 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(); 
} 
相關問題