进行 WhatsApp 语音/视频通话

问题描述 投票:0回答:2

我正在尝试了解如何直接从应用程序进行 Whatsapp 通话(视频和语音)。我读了这篇文章:android-make Whatsapp call但我不明白。我希望用户能够从联系人列表中选择联系人,然后将他们带到带有两个按钮的屏幕:视频呼叫和语音呼叫。联系人的电话号码也将显示为顶部的文本视图。他们可以单击任一按钮,应用程序将拨打 Whatsapp 电话。我不知道如何获取特定联系人的 ID 并调用它。

如果有人能用另一种方式解释它,我将非常感激。

谢谢

android whatsapp
2个回答
7
投票

我刚刚弄清楚这意味着什么,所以我想我会与你们分享这个,以防其他人也感到困惑。如果其中一些不是 100% 正确,敬请原谅。

为了发送 Whatsapp 通话/视频通话,您需要获取联系人的 ID。不仅仅是任何 ID,具有适合 Whatsapp 的特定mimetype 的 ID。这些 mimetypes 是 vnd.android.cursor.item/vnd.com.whatsapp.video.callvnd.android.cursor.item/vnd.com.whatsapp.voip.call

要查询 ID,您必须使用内容解析器。 ContactsContract.Data.CONTENT_URI 从联系人获取数据并将其发送回。您可以通过指定投影进一步减少它查询的内容。投影是您希望它返回的列,例如联系人姓名、电话号码。如果将其保留为空,则不会过滤掉任何数据。这是可选的。如果您确实使用投影,请确保包含要返回的以下 2 列: ContactsContract.Data._ID、ContactsContract.Data.DISPLAY_NAME、ContactsContract.Data.MIMETYPE。

// here is how to make a projection. you have to use an array. My example only returns the ID, Name of Contact and Mimetype. 

String[] projection = = new String[] {ContactsContract.Data._ID, ContactsContract.Data.DISPLAY_NAME, ContactsContract.Data.MIMETYPE};


ContentResolver resolver = context.getContentResolver();  
cursor = resolver.query(
            ContactsContract.Data.CONTENT_URI,
            projection, null, null,
            ContactsContract.Contacts.DISPLAY_NAME);

光标返回信息后,您可以使用此代码来浏览它。它的作用是当光标移动到下一个联系人时,它将 ID、显示名称和 mimetype 存储在 3 个单独的变量中。它使用 cursor.getColumnIndex() 获取相应的列,然后使用 cursor.getLong() 获取该列的实际值。

while (cursor.moveToNext()) {
                long _id = cursor.getLong(cursor.getColumnIndex(ContactsContract.Data._ID));
                String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
                String mimeType = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.MIMETYPE));


                if (mimeType.equals("vnd.android.cursor.item/vnd.com.whatsapp.voip.call") || mimeType.equals("vnd.android.cursor.item/vnd.com.whatsapp.video.call")) {
                     // store in database

if (mimeType.equals("vnd.android.cursor.item/vnd.com.whatsapp.voip.call")) {
String voiceCallID = Long.toString(_id);

    }
    else{
    String videoCallID = Long.toString(_id);
    }

     }

   }
}

您还需要检查 mimetype 是否为 vnd.android.cursor.item/vnd.com.whatsapp.video.call(用于视频通话)或 vnd.android.cursor.item/vnd.com。 Whatsapp.voip.call(用于语音通话) 为此,我使用了 if 语句,如果它是 true,则将其存储到数据库中。光标将浏览每个联系人的每个 mimetype。因此,它将检查一次视频呼叫 mimetype 和一次语音呼叫 mimetype。

然后,为了通过 Whatsapp 呼叫某人,请检索语音或视频的 ID 并将其放入 id 参数中。确保它是正确的并且调用了正确的方法,否则它将无法工作。

    public void voiceCall(String id){
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_VIEW);

                intent.setDataAndType(Uri.parse("content://com.android.contacts/data/" + id),
                        "vnd.android.cursor.item/vnd.com.whatsapp.voip.call");
                intent.setPackage("com.whatsapp");

                startActivity(intent);

}

视频通话:

public void videoCall(String id){
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_VIEW);

                intent.setDataAndType(Uri.parse("content://com.android.contacts/data/" + id),
                        "vnd.android.cursor.item/vnd.com.whatsapp.video.call");
                intent.setPackage("com.whatsapp");

                startActivity(intent);

}

就是这样!如果有任何错误或者可以更简单解释的地方,请评论!


0
投票

https://github.com/brewkon/Whatsapp-Call

本项目完成whatsapp语音通话,不仅可以打电话还可以发送语音文件。

© www.soinside.com 2019 - 2024. All rights reserved.