Выполнение голосового / видео звонка в WhatsApp - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь выяснить, как я могу сделать вызов WhatsApp (как видео, так и голос) прямо из приложения.Я прочитал этот пост: android-make whatsapp называют , но я не понимаю этого.Я хочу, чтобы пользователь мог выбрать контакт из своего списка контактов, а затем он выводится на экран с помощью двух кнопок: видеовызов и голосовой вызов.Телефонный номер контакта также будет отображаться в виде текстового представления сверху.Они могут нажать любую из кнопок, и приложение выполнит вызов WhatsApp.Я не уверен, как я могу получить идентификатор конкретного контакта и позвонить.

Если бы кто-нибудь мог объяснить это по-другому, я был бы очень благодарен.

Спасибо

1 Ответ

0 голосов
/ 21 октября 2018

Я только что понял, что это значит, поэтому я подумал, что поделюсь этим с вами, ребята, на случай, если кто-то еще будет сбит с толку.Приносим извинения, если некоторые из них не на 100% правильны.

Чтобы отправить вызов / видеозвонок в WhatsApp, вам необходимо получить ID контакта.Не просто какой-либо идентификатор, идентификатор с конкретным mimetype , который подходит для WhatsApp.Эти mime-типы: vnd.android.cursor.item / vnd.com.whatsapp.video.call или vnd.android.cursor.item / vnd.com.whatsapp.voip.call

Чтобы запросить идентификаторы, вы должны использовать определитель содержимого. 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);

После того, как курсор вернет информацию, вы используете этот код для ее просмотра.Что делает, так это когда курсор перемещается к следующему контакту, он сохраняет идентификатор, отображаемое имя и 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, если он был истинным, сохраните его в своей базе данных.Курсор будет проходить через каждый миметип каждого контакта.Таким образом, он будет проходить через mimetype видеозвонка один раз и mimetype голосового вызова один раз.

Затем, чтобы WhatsApp позвонил кому-то, извлеките идентификатор для голоса или видео и вставьте его в параметры идентификатора.Убедитесь, что это правильно, и вы вызываете правильный метод, иначе он не будет работать.

    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);

}

Вот и все!Если есть какие-то биты, которые являются неправильными или которые можно объяснить проще, прокомментируйте!

...