Запустите Google Hangouts из Intent в приложении New Hangouts для Android
Предыдущие обсуждения здесь касаются начала видеовстречи Google с намерением Android:
начать google-антракты в андроиде
Как начать Google Hangouts в Android с намерением?
Вывод состоял в том, что это было невозможно. Это запрошенное улучшение здесь:
https://code.google.com/p/google-plus-platform/issues/detail?id=385
Однако вчера Google выпустил новое приложение Hangouts с новым набором намерений. Возможно ли начать видеовстречу через намерение?
Я был частично успешным с action=android.intent.action.VIEW
, data=content://plus.google.com/hangouts
.
Однако, я хочу передать имя или идентификатор человека, которого я хочу назвать, - имя получателя. Я не могу понять это.
Новое приложение для подключения к браузеру запускает видеовстречу с 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.
Я предполагаю, что не все эти параметры необходимы для запуска видеовстречи, но я не могу расшифровать, как передать имя получателя в намерении.
Любые мысли?
Спасибо.
Ответы
Ответ 1
Поэтому я не знаю, помогает ли это кому-либо другому, потому что я в основном старался сбить цель с помощью 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. Удачи!
Ответ 2
Простое решение: Query ContactContract.Data для типа _id и MIME.
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
Теперь сохраните в БД или где-то еще только те _Ids, тип MIME которых vnd.android.cursor.item/vnd.googleplus.profile.comm
И затем вы инициируете видеовстречу/сообщение с такими контактами, как этот.
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+ > Настройки > Контакты.
Ответ 3
Hangout может обрабатывать общие намерения использования.
Вот код:
Intent sendIntent = new Intent(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_TEXT, "text to be shared");
activity.startActivity(sendIntent);
Ответ 4
Эй, я думаю, вы попробуете это.
Intent sky = new Intent("android.intent.action.VIEW", Uri.parse("https://talkgadget.google.com/hangouts/extras/talk.google.com/myhangout"));
startActivity(sky);
Вам просто нужно указать URL-адрес видеовстречи, но, к сожалению, Google приостановил названные ансамбли, поэтому этот URL-адрес меняется каждый раз.
Ответ 5
попробуйте таким образом
Ниже используется метод совместного использования текста в видеовстрече
/**
* 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;
}
Ниже метода используйте goto playstore, если HangOut не установлен
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;
}