Запустите Google Hangout из Intent в новом приложении Hangouts для Android

Здесь уже обсуждались вопросы запуска Google Hangouts с намерения на Android: видеовстречи на Android

Как запустить Google Hangout в 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.

Однако я хочу передать имя или идентификатор человека, которому я хочу позвонить, — имя получателя. Я не могу понять это.

Новое браузерное приложение 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.

Я предполагаю, что не все эти параметры необходимы для начала видеовстречи, но я не могу понять, как передать имя получателя в намерении.

Есть предположения? Спасибо.


person user2388372    schedule 16.05.2013    source источник


Ответы (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, чтобы взломать таблицу данных в базе данных контактов и найти строки, в которых MIMETYPE_ID = 16 и DATA4 = 10. Вам также нужно будет выяснить, что такое ваш RAW_CONTACT_ID. Удачи!

person Sean    schedule 31.07.2013
comment
Не могли бы вы объяснить, как получить номер значения данных с помощью запросов? - person android developer; 15.03.2016

Простое решение — запросить 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 Аллен vnd.android.cursor.item/vnd.googleplus.profile.comm

12562 Аллен vnd.android.cursor.item/vnd.googleplus.profile.comm

12564 Аллен 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+ > «Настройки» > «Контакты».

person Adnan Khan    schedule 30.07.2016

Hangout может обрабатывать общие намерения общего доступа.

Вот код:

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

        activity.startActivity(sendIntent);
person AndyW    schedule 17.04.2014
comment
Именно так работает Android: Intent позволяет пользователю выбирать, какое приложение открывать. - person Thomas Decaux; 18.06.2014

попробуй так

Метод ниже используется для обмена текстом в видеовстрече

/**
 * 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;
}
person Lokesh    schedule 08.07.2016

Эй, я думаю, ты попробуешь это.

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

Нужно просто указать урл тусовки, но к сожалению гугл приостановил именованные ханготы, поэтому этот урл каждый раз меняется.

person Jatin Patel    schedule 16.05.2013
comment
К сожалению, это не выполняет то, что я хочу. Я знаю, как запустить приложение, но мне нужно иметь возможность автоматически вызывать получателя. Другими словами, мне нужно иметь возможность передать получателю намерение. - person user2388372; 16.05.2013
comment
Кроме того, для ясности, я говорю о совершенно новом приложении Hangouts, которое было выпущено вчера, 15 мая 2013 года. Это имеет разные намерения по сравнению со старыми намерениями видеовстречи Google+, которые определенно не позволяли передать получателю намерение. - person user2388372; 16.05.2013
comment
Вы нашли способ сделать это? - person RagHaven; 05.07.2013
comment
Я думаю, что это шаг вперед. Это действительно позволяет вам присоединиться к видеовстрече, но вам все равно нужно нажать кнопку. Вероятно, есть параметр, говорящий, что не нужно ждать нажатия кнопки. Вы можете потерять много времени, начав сеанс с 5 или 6 людьми, суетящимися вокруг, пытаясь щелкнуть по экрану!! - person user462990; 01.08.2013