无法识别WhatsApp联系人

4
我正在尝试编写一个Android程序,可以识别给定的联系人号码是否与WhatsApp相关。我已经成功找到了特定联系人姓名是否拥有WhatsApp帐户的方法。如何找出与该联系人姓名相对应的联系人是否有WhatsApp帐户?目前我正在使用以下代码:
public void identifyWhatsappContact() {
    Cursor c = ctx.getContentResolver().query(
            RawContacts.CONTENT_URI,
            new String[] { RawContacts.CONTACT_ID, RawContacts.DISPLAY_NAME_PRIMARY },
            RawContacts.ACCOUNT_TYPE + "= ? AND " + StructuredName.DISPLAY_NAME_PRIMARY + " = ?",
            new String[] { "com.whatsapp", "John Doe" },
            null);

    ArrayList<String> myWhatsappContacts = new ArrayList<String>();
    int contactNameColumn = c.getColumnIndex(RawContacts.DISPLAY_NAME_PRIMARY);
    while (c.moveToNext())
    {
        myWhatsappContacts.add(c.getString(contactNameColumn));
        Log.v("WHATSAPP", c.getString(contactNameColumn)+"");
    }
}

我能够确定“John Doe”是否有WhatsApp,但我无法弄清楚“John Doe”的哪个电话号码有WhatsApp(假设联系人有多个电话号码)。 有人可以帮帮我吗? 我已经尝试了这里的解决方案,但对我没有用。

我不明白为什么会被踩! - Vinit Shandilya
1个回答

7
这个例子提取了联系人名称的所有WhatsApp号码:
public void getWhatsAppNumbers(String contactName) {
    Cursor cursor1 = getContentResolver().query(
            ContactsContract.RawContacts.CONTENT_URI,
            new String[]{ContactsContract.RawContacts._ID},
            ContactsContract.RawContacts.ACCOUNT_TYPE + "= ? AND " + ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME_PRIMARY + " = ?",
            new String[]{"com.whatsapp", contactName},
            null);

    while (cursor1.moveToNext()) {
        String rawContactId = cursor1.getString(cursor1.getColumnIndex(ContactsContract.RawContacts._ID));

        Cursor cursor2 = getContentResolver().query(
                ContactsContract.Data.CONTENT_URI,
                new String[]{ContactsContract.Data.DATA3},
                ContactsContract.Data.MIMETYPE + " = ? AND " + ContactsContract.Data.RAW_CONTACT_ID + " = ? ",
                new String[]{"vnd.android.cursor.item/vnd.com.whatsapp.profile", rawContactId},
                null);

        while (cursor2.moveToNext()) {
            String phoneNumber = cursor2.getString(0);

            if (TextUtils.isEmpty(phoneNumber))
                continue;

            if (phoneNumber.startsWith("Message "))
                phoneNumber = phoneNumber.replace("Message ", "");

            Log.d("whatsapp", String.format("%s - %s", contactName, phoneNumber));
        }
    }
}

非常感谢!对我很有用。只是一个小修正。我在“Message”后面没有找到任何空格。所以,我只是使用了:phoneNumber.replace("Message", "")。 - Vinit Shandilya
先生 @mattia Maestrini,您能否为我目前正在开发的Android应用程序提供建议?我想通过用户输入的电话号码(可能不是设备电话号码)来注册用户。我想获取使用此电话号码的应用程序名称(如WhatsApp、Paytm等),以便我可以将关联的应用程序名称与电话号码一起发送到服务器。我在 https://www.reddit.com/r/androiddev/comments/9vi48l/get_name_of_the_applications_linked_to_a_phone/ 上发布了这个问题。 - Jose Kj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接