Подтвердить что ты не робот

Запустите 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.

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

Любые мысли? Спасибо.

4b9b3361

Ответ 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;
}