8

我正在寻找一种在环聊或 Duo 中发起视频通话的方法。关于应该使用什么意图的文档似乎有 0 个。有人有想法吗?

4

3 回答 3

6

让我们在这里考虑Duo

研究

1.首先,要找出意图,您应该在手机上激活USB调试模式 - 请参阅此答案以了解如何操作。

2.然后,将您的手机连接到您的计算机,以便您可以从您的设备中看到logcat(调试级别应该是 info)。

3.打开联系人(来自谷歌)并找到您可以使用Duo呼叫的联系人。现在,开始通话并搜索com.google.android.apps.tachyon。会有几场比赛,但重要的一场看起来像:

开始 u0 {act=com.google.android.apps.tachyon.action.CALL typ=null flg=0x0 cmp=ComponentInfo{com.google.android.apps.tachyon/com.google.android.apps.tachyon.ExternalCallActivity} } 从 uid 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.您将看到一个视频通话屏幕,其中包含可能的联系人。

结论

如果您想了解如何开始视频通话或聊天或其他方式,请尝试与上述相同 - 首先手动执行并检查在这些情况下使用的意图(和参数)。

于 2020-02-20T07:28:33.883 回答
3

目前没有任何 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);
于 2020-02-25T10:47:30.910 回答
0

A) HangoutUrlHandlerActivityShortlinkUrlHandlerActivity并且可以通过ConversationUrlHandlerActivity接收。IntentUri

到目前为止,我所拥有的实际上是有效的,但仅适用于正在进行的对话和视频通话:

a) 打开一个正在进行的对话:

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

b) 加入正在进行的视频通话(ID 来自hangouts.google.com/hangouts/_/meet):

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 日历约会。


根据@ Mir Milad的评论,我至少设法创建了一个新的文本对话;但仍然没有任何东西会打电话给某人(它会在发送第一条消息后立即通知):

/** @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);
}

据我所知,环聊没有明确的“打电话给我”网址。即使是基于网络的,环聊也是用两个 Gaia ID 发起的,然后会产生一个房间名称来加入。在查看最近的评论时,甚至谷歌自己的环聊拨号器似乎也坏了。


B)对于 Google Duo,这里已经回答

于 2020-02-20T07:02:14.370 回答