我正在尝试找出如何直接从应用程序进行whatsapp呼叫(视频和语音)的方法。我读了这篇文章:android-make whatsapp call,但我听不懂。我希望用户能够从他们的联系人列表中选择一个联系人,然后将他们带到具有两个按钮的屏幕:“视频通话”和“语音通话”。联系人的电话号码也将在顶部显示为文本视图。他们可以单击任一按钮,该应用程序将拨打whatsapp呼叫。我不确定如何获取特定联系人的ID并进行呼叫。
如果有人可以用另一种方式解释它,我将非常感激。
谢谢
答案 0 :(得分:0)
我刚刚弄清楚这是什么意思,所以我想与其他人分享这件事,以防其他人也感到困惑。抱歉,如果其中一些不是100%正确。
要发送whatsapp通话/视频通话,您需要获取联系人的 ID 。不只是任何ID,还有具有特定 mimetype 的ID(适用于whatsapp)。这些模仿类型是 vnd.android.cursor.item / vnd.com.whatsapp.video.call 或 vnd.android.cursor.item / vnd.com.whatsapp.voip.call
要查询ID,您必须使用内容解析器。 ContactsContract.Data.CONTENT_URI 从联系人获取数据并将其发送回去。您可以通过指定投影来进一步减少查询的内容。投影是您希望其返回的列,例如联系人姓名,电话号码。如果将其保留为null,则不会过滤掉任何数据。它是可选的。如果您确实使用投影,请确保包括以下两列以供返回: 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,显示名称和模仿类型存储在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);
}
}
}
}
您还需要检查模仿类型是 vnd.android.cursor.item / vnd.com.whatsapp.video.call (用于视频通话)还是 vnd.android .cursor.item / vnd.com.whatsapp.voip.call (用于语音通话) 为此,我使用了if语句(如果为真),将其存储到您的数据库中。光标将遍历每个联系人的每个模仿类型。因此,它将一次通过视频通话模拟类型,一次通过语音通话模拟类型。
然后,为了使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);
}
就是这样!如果有任何错误或可以更简单地解释的位,请注释!