Я ищу способ начать видеозвонок в Hangouts или Duo. Кажется, нет документации относительно того, какие намерения следует использовать. У кого-нибудь есть идея?
Начать видеовстречу в Hangouts или Duo с намерением?
Ответы (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.Вы увидите экран видеовызова с возможными контактами.
Заключение
Если вы хотите узнать, как начать видеозвонок, чат или что-то еще, попробуйте сделать то же самое, что и выше — сначала сделайте это вручную и проверьте, какие намерения (и аргументы) используются в этих случаях.
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);
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 на этот вопрос уже был дан ответ здесь.