在新环聊Android应用中从Intent启动Google Hangout

时间:2013-05-16 04:51:05

标签: android android-intent hangout

此前有关于从Android上的意图启动Google环聊的讨论: start google hangouts in android

How can I start a Google Hangout in Android with an Intent?

结论是这是不可能的。这是一个要求的增强功能: https://code.google.com/p/google-plus-platform/issues/detail?id=385

然而,昨天谷歌发布了一个新的环聊应用程序,带有一组新的意图。现在可以通过意图开始环聊吗?

我使用action=android.intent.action.VIEWdata=content://plus.google.com/hangouts取得了部分成功。

但是,我想传递我要呼叫的人的姓名或ID - 收件人姓名。我无法解决这个问题。

新的基于浏览器的环聊应用程序会启动一个带有以下URL的视频群聊:

https://plus.google.com/hangouts/_/CONVERSATION/[26-character ID]?hl=en_US&hscid=[19-digit ID]&hpe=[14-character value]&hpn=[Google+ Name of Recipient]&hnc=0&hs=41.

我认为并非所有这些参数都是开始视频群聊所必需的,但我无法破译如何在意图中传递收件人名称。

有什么想法? 谢谢。

5 个答案:

答案 0 :(得分:5)

所以我不知道这对其他人是否有帮助,因为我主要是想使用tasker来激活一个意图。如果你进入Google+>设置>您可以查看“保持联系人最新”的联系人,它会向您在Android中单击用户时显示的卡添加一些新操作。然后,您可以使用Intent Intercept来读取通过的值。这就是我得到的:

ACTION: android.intent.action.VIEW
DATA: content://com.android.contacts/data/5555
TYPE: vnd.android.cursor.item/vnd.googleplus.profile.comm

FLAGS:
FLAG_ACTIVITY_FORWARD_RESULT
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET
FLAG_ACTIVITY_PREVIOUS_IS_TOP

1 ACTIVITIES MATCH THIS INTENT:
Hangouts (com.google.android.talk - com.google.android.apps.babel.phone.BabelProfileActionActivity)

我能够使用前三个值来正确地打开与该联系人的对话。显然,数据字段中的数字会根据联系人而改变。您可以使用Intent Intercept技巧,或者如果您拥有root,则可以使用类似SQLite Debugger的内容来破解联系人数据库中的数据表,并找到MIMETYPE_ID = 16和DATA4 = 10的行。我们必须找到你的RAW_CONTACT_ID。祝你好运!

答案 1 :(得分:2)

简单的解决方案是,对于_id和MIME类型,查询ContactContract.Data。

ContentResolver resolver = context.getContentResolver();  
cursor = resolver.query(
            ContactsContract.Data.CONTENT_URI,
            null, null, null,
            ContactsContract.Contacts.DISPLAY_NAME);

//Now read data from cursor like 

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

      Log.d("Data", _id+ " "+ displayName + " " + mimeType );

}

输出将如下所示

12561 Allen vnd.android.cursor.item / vnd.googleplus.profile.comm

12562 Allen vnd.android.cursor.item / vnd.googleplus.profile.comm

12564 Allen vnd.android.cursor.item / vnd.googleplus.profile

现在只在DB或其他地方保存那些MIME类型为vnd.android.cursor.item / vnd.googleplus.profile.comm

的_Ids

然后你用这样的联系方式发起环聊电话/留言

Intent intent = new Intent();
            intent.setAction(Intent.ACTION_VIEW);

// the _ids you save goes here at the end of /data/12562     
     intent.setDataAndType(Uri.parse("content://com.android.contacts/data/_id"),
                    "vnd.android.cursor.item/vnd.googleplus.profile.comm");
            intent.setPackage("com.google.android.talk");

startActivity(intent);

要使上述代码生效,您必须检查"使联系人保持最新状态"在Google+应用中>设置>触点。

答案 2 :(得分:1)

环聊可以处理一般的共享意图。

以下是代码:

        Intent sendIntent = new Intent(Intent.ACTION_SEND);
        sendIntent.setType("text/plain");
        sendIntent.putExtra(Intent.EXTRA_TEXT, "text to be shared");

        activity.startActivity(sendIntent);

答案 3 :(得分:1)

以这种方式尝试

以下方法用于将文字分享到视频群聊

/**
 * Initiate the actions encoded in the specified URI.
 */
public void initiateHangOutUri(Context myContext, String textToShare) {

  // Make sure Android client is installed.
  if (!isHangOutClientInstalled(myContext)) {
    goToMarket(myContext);
    return;
  }

  Intent sendIntent = new Intent();
  sendIntent.setAction(Intent.ACTION_SEND);
  sendIntent.putExtra(Intent.EXTRA_TEXT, textToShare);
  sendIntent.setType("text/plain");
  sendIntent.setPackage("com.google.android.talk");
  context.startActivity(sendIntent);

  return;
}

以下方法用于检查此设备上安装的HangOut

/**
 * Determine whether the HangOut for Android client is installed on this device.
 **/
public boolean isHangOutClientInstalled(Context myContext) {
  final PackageManager packageManager = context.getPackageManager();
    Intent intent = packageManager.getLaunchIntentForPackage("com.google.android.talk");
    if (intent == null) {
        return false;
    }
    List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
    return list.size() > 0;
}

如果未安装HangOut,请使用goto playstore

public void goToMarket(Context myContext) {
  Uri marketUri = Uri.parse("market://details?id=com.skype.raider");
  Intent myIntent = new Intent(Intent.ACTION_VIEW, marketUri);
  myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  myContext.startActivity(myIntent);

  return;
}

答案 4 :(得分:0)

嘿,我想你试试这个。

Intent sky = new Intent("android.intent.action.VIEW", Uri.parse("https://talkgadget.google.com/hangouts/extras/talk.google.com/myhangout"));
startActivity(sky);

你只需要提供视频群聊的网址,但遗憾的是google暂停了已命名的漫游,因此每次更改时都会显示此网址。