Совершение голосового / видеозвонка в WhatsApp

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

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

Спасибо

1
0
2 395
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Чтобы запросить идентификаторы, вы должны использовать преобразователь контента. КонтактыContract.Data.CONTENT_URI получает данные от контактов и отправляет их обратно. Вы можете дополнительно сократить количество запросов, указав проекцию. Прогноз - это столбцы, которые вы хотите вернуть, например имя контакта, номер телефона. Если вы оставите значение null, он не будет фильтровать данные. Это необязательно. Если вы все же используете прогноз, убедитесь, что вы включили эти 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 видеозвонка один раз и 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);

}

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

Многое из того, что я сделал, было извлечено из множества различных публикаций, веб-сайтов и ресурсов. Я не знаю, можно ли это сделать так, но у меня это сработало.

krispo.uke 17.03.2019 14:03

Другие вопросы по теме