Android

Enviar una señal

Ahora que se ha conectado a la sesión y tiene un objeto de sesión, puede enviar una Señal. Las señales son textos o datos arbitrarios que se envían en una sesión y que pueden enviarse a un cliente específico o a todos los clientes conectados. Puedes aprender más sobre ellas en la sección Guía para desarrolladores de Vonage Video Signaling. Para este tutorial usted enviará texto.

  1. Crea una nueva clase llamada SignalMessage con este código:
public class SignalMessage {

    private String messageText;
    private Boolean remote;

    public SignalMessage(String messageText) {
        this.messageText = messageText;
        this.remote = false;
    }

    public SignalMessage(String messageText, Boolean remote) {
        this.messageText = messageText;
        this.remote = remote;
    }

    public String getMessageText() {
        return this.messageText;
    }

    public Boolean isRemote() {
        return this.remote;
    }
}

Esta clase se utilizará para mostrar las señales en la interfaz de usuario.

  1. Copia el siguiente código y pégalo debajo del código que ya tienes en tu MainActivity después de la clase onCreate función:
private void sendMessage() {
  Log.d(TAG, "Send Message");
  String data = messageEditTextView.getText().toString();
  session.sendSignal("msg", data);

  SignalMessage message = new SignalMessage(data);
  messageHistory.add(message);

  messageEditTextView.setText("");
}

Este código añade una función que se llamará desde la interfaz de usuario. session.signal para enviar el texto como señal. session.signal toma el tipo de Señal y algunos datos. El tipo es opcional, pero se puede utilizar para diferenciar entre los tipos de señales en su aplicación. Si la señal se envía correctamente, se añade a la matriz de mensajes que utiliza la interfaz de usuario.

  1. En el MainActivity actualice el final de la clase onCreate para añadir un receptor a la función EditTextView que utiliza el sendMessage función:
messageEditTextView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_DONE) {
            InputMethodManager inputMethodManager = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
            inputMethodManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
            sendMessage();
            return true;
        }
        return false;
    }
});

Cuando el EditTextView emite una acción de finalización, el sendMessage será llamada. Ahora es el momento de actualizar la interfaz de usuario:

  1. Abra el activity_main.xml archivo de diseño (res > diseño).
  2. Abre la vista de código.
  3. Copie este XML sobre el diseño existente:
  <?xml version="1.0" encoding="utf-8"?>
  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:keepScreenOn="true"
    android:layout_height="match_parent"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="16dp"
    android:paddingBottom="16dp"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/message_history_list_view"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/message_edit_text"
        android:transcriptMode="alwaysScroll"
        android:layout_marginBottom="8dp" />

    <EditText
        android:id="@+id/message_edit_text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:enabled="false"
        android:hint="Message"
        android:imeOptions="actionDone"
        android:inputType="text"
        android:maxLines="1" />
  </RelativeLayout>
  1. Crea un nuevo archivo de diseño llamado message_single_local.xml con este XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:orientation="horizontal">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Local Message"
        android:id="@+id/message_text"
        android:gravity="end"
        android:layout_marginTop="1dp"
        android:layout_marginBottom="1dp"
        android:layout_marginLeft="2dp"
        android:layout_marginRight="2dp" />
</LinearLayout>
  1. Duplica el message_single_local.xml, llámalo message_single_remote.xmly cambiar la gravedad a start.
  2. Añadir un adaptador para el historial de mensajes ListView, crea una clase llamada SignalMessageAdapter con este código:
public class SignalMessageAdapter extends ArrayAdapter<SignalMessage> {

  public static final int VIEW_TYPE_LOCAL = 0;
  public static final int VIEW_TYPE_REMOTE = 1;
  private static final Map<Integer, Integer> viewTypes;

  static {
      Map<Integer, Integer> aMap = new HashMap<>();
      aMap.put(VIEW_TYPE_LOCAL, R.layout.message_single_local);
      aMap.put(VIEW_TYPE_REMOTE, R.layout.message_single_remote);
      viewTypes = Collections.unmodifiableMap(aMap);
  }

  public SignalMessageAdapter(Context context) {
      super(context, 0);
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
      SignalMessage message = getItem(position);

      if (convertView == null) {
          int type = getItemViewType(position);
          convertView = LayoutInflater.from(getContext()).inflate(viewTypes.get(type), null);
      }

      TextView messageTextView = (TextView) convertView.findViewById(R.id.message_text);
      if (messageTextView != null) {
          messageTextView.setText(message.getMessageText());
      }

      return convertView;
  }

  @Override
  public int getItemViewType(int position) {

      SignalMessage message = getItem(position);
      return message.isRemote() ? VIEW_TYPE_REMOTE : VIEW_TYPE_LOCAL;
  }

  @Override
  public int getViewTypeCount() {
      return viewTypes.size();
  }
}

Los adaptadores se utilizan para rellenar las vistas en un ListViewEsto define uno personalizado para las Señales. Asegúrese de importar las clases que sean necesarias.

Chat de texto básico

Sigue este tutorial para crear un chat de texto básico desde cero usando la Video API de Vonage. Es la forma más rápida de crear una prueba de concepto para esta funcionalidad en la plataforma de video.

Pasos
1
Visión general
2
Antes de empezar
3
Configurar una aplicación de video de Vonage
4
Creación del proyecto
5
Configuración de la autenticación
6
Conexión a la sesión
7
Enviar una señal
8
Recepción de una señal
9
Cómo probar tu código
10
Conclusión