此前有关于从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.VIEW
,data=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.
我认为并非所有这些参数都是开始视频群聊所必需的,但我无法破译如何在意图中传递收件人名称。
有什么想法? 谢谢。
答案 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暂停了已命名的漫游,因此每次更改时都会显示此网址。