Начать видеовстречу в Hangouts или Duo с намерением?

Я ищу способ начать видеозвонок в Hangouts или Duo. Кажется, нет документации относительно того, какие намерения следует использовать. У кого-нибудь есть идея?


person Konstantin Milyutin    schedule 13.02.2020    source источник


Ответы (3)


Рассмотрим здесь Duo.

Исследование

1. Прежде всего, чтобы выяснить намерение, вы должны активировать режим отладки USB на своем телефоне — см. usb-debugging-in-android">ответ, чтобы узнать, как это сделать.

2. Затем подключите телефон к компьютеру, чтобы вы могли видеть logcat с вашего устройства (уровень отладки должен быть информационным).

3.Откройте Контакты (из Google) и найдите контакт, которому вы можете позвонить с помощью Duo. Теперь начните вызов и найдите com.google.android.apps.tachyon. Будет несколько совпадений, но главное выглядит примерно так:

НАЧНИТЕ u0 {act=com.google.android.apps.tachyon.action.CALL type=null flg=0x0 cmp=ComponentInfo{com.google.android.apps.tachyon/com.google.android.apps.tachyon.ExternalCallActivity} } из идентификатора пользователя 10031

4. Итак, как только вы узнаете информацию о компоненте для своего приложения Duo, просто добавьте следующий код в свое приложение, откуда вы хотите начать видеовызов.

val intent = Intent()
intent.setAction("com.google.android.apps.tachyon.action.CALL")
intent.setClassName("com.google.android.apps.tachyon",
    "com.google.android.apps.tachyon.ExternalCallActivity")
startActivity(intent)

5.Вы увидите экран видеовызова с возможными контактами.

Заключение

Если вы хотите узнать, как начать видеозвонок, чат или что-то еще, попробуйте сделать то же самое, что и выше — сначала сделайте это вручную и проверьте, какие намерения (и аргументы) используются в этих случаях.

person Anatolii    schedule 20.02.2020
comment
Для меня это приводит к запуску нового действия типа com.google.android.apps.tachyon.action.PRECALL_ACTIVITY, а вызов из номеронабирателя приводит к запуску нового действия типа com.google.android.apps.tachyon.action.CALL. Оба имеют имя класса com.google.android.apps.tachyon/.ProcessedCallRequestActivity. Попытка запуска действия вручную приводит к появлению экрана предварительного вызова с правильным контактом и кнопкой «Видеозвонок», в то время как намерение номеронабирателя успешно запускает видеовызов. Намерения выглядят одинаково в logcat. Есть идеи? - person Yigal; 16.03.2020

В настоящее время нет доступной документации по API для интеграции приложения Google Duo.

Вы можете использовать этот код, он работает для запуска дуэта.

String data = "content://com.android.contacts/data/" + ID;
// Build the intent
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_DEFAULT);
// the _ids you save goes here at the end of /data/id
intent.setData(Uri.parse("content://com.android.contacts/data/" + ID));
//For audio call
intent.setComponent(new ComponentName(packageName, "com.google.android.apps.tachyon.ContactsAudioActionActivity"));
//use this for video call
//intent.setComponent(new ComponentName(packageName, "com.google.android.apps.tachyon.ContactsVideoActionActivity"));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// Verify it resolves
PackageManager packageManager = context.getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
boolean isIntentSafe = activities.size() > 0;
// Start an activity if it's safe
if (isIntentSafe) {
    context.startActivity(intent);
    Toast.makeText(context, "Opening Duo", Toast.LENGTH_SHORT).show();
}

Или вы можете использовать следующий подход, передавая номер телефона

Intent intent = new Intent();
intent.setPackage("com.google.android.apps.tachyon");
intent.setAction("com.google.android.apps.tachyon.action.CALL");
intent.setData(Uri.parse("tel:1234567890"));
startActivity(intent);
person Muzammil Husnain    schedule 25.02.2020

A) HangoutUrlHandlerActivity, ShortlinkUrlHandlerActivity и ConversationUrlHandlerActivity доступны для получения Intent с Uri.

Что у меня есть на данный момент, что на самом деле работает, но только для текущих разговоров и видеовызовов:

а) открытие продолжающегося разговора:

void joinConversation(@NonNull String conversationId) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    Uri uri = new Uri.Builder().scheme("content").authority("hangouts.google.com").appendPath("chat").appendPath(conversationId).build();
    intent.setClassName("com.google.android.talk", "com.google.android.apps.hangouts.phone.ConversationUrlHandlerActivity");
    intent.setDataAndType(uri, "vnd.google.android.hangouts/vnd.google.android.hangout_whitelist");
    startActivity(intent);
}

б) присоединение к текущей видеовстрече (идентификатор берется из hangouts.google.com/hangouts/_ /встреча):

void joinHangout(@NonNull String callId) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    Uri uri = new Uri.Builder().scheme("content").authority("g.co").appendPath("hangout").appendPath(Uri.encode(callId)).build();
    intent.setClassName("com.google.android.talk", "com.google.android.apps.hangouts.phone.ShortlinkUrlHandlerActivity");
    intent.setDataAndType(uri, "vnd.google.android.hangouts/vnd.google.android.hangout_whitelist");
    startActivity(intent);
}

Если прямые приглашения невозможны, можно по-прежнему планировать вызовы через API календаря, откуда можно получить callId, чтобы можно было присоединиться к видеовстрече, как только она запланирована. Google Meet даже не поддерживает прямые приглашения, а только через встречи в Календаре Google.


Основываясь на комментарии @Мира Милада, мне удалось, по крайней мере, создать новую текстовую беседу; но все еще ничего, что могло бы кому-то позвонить (уведомляет, как только первое сообщение было отправлено):

/** @param googleUserId that 21 digit Google user ID, aka Gaia ID  */
void createConversation(@NonNull String googleUserId) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    Uri uri = new Uri.Builder().scheme("content").authority("hangouts.google.com").appendPath("chat").appendPath("person").appendPath(googleUserId).build();
    intent.setClassName("com.google.android.talk", "com.google.android.apps.hangouts.phone.ConversationUrlHandlerActivity");
    intent.setDataAndType(uri, "vnd.google.android.hangouts/vnd.google.android.hangout_whitelist");
    startActivity(intent);
}

Насколько я могу судить, для Hangouts не существует такой вещи, как явный URL-адрес «позвони мне». И даже в Интернете Hangout запускается с двумя идентификаторами Gaia, которые затем приводят к названию комнаты для присоединения. Даже собственный Hangouts Dialer от Google кажется быть сломанным, глядя на недавние комментарии.


Б) Для Google Duo на этот вопрос уже был дан ответ здесь.

person Martin Zeitler    schedule 20.02.2020
comment
Вопрос здесь в том, чтобы найти способ НАЧАТЬ видеозвонок, а НЕ присоединиться к текущему. Ваш ответ вводит в заблуждение! Я должен был проголосовать за тебя, но я не буду делать что-то ужасное, как ты сделал с некоторыми другими людьми здесь. - person Harry Timothy; 23.02.2020
comment
@harrytmthy Это едва ли вводит в заблуждение, когда прямо заявляет об этом ... на случай, если кто-то прочитает. Это, по крайней мере, дает понять, что нельзя напрямую звонить по видеосвязи, за исключением того, что есть URL-адрес, который мог бы это сделать. Быть отвергнутым за предоставление оригинального контента сомнительно, поскольку мне потребовалось довольно много времени, чтобы найти эти намерения и аргументы URL. На самом деле это два вопроса, а не один. - person Martin Zeitler; 25.02.2020