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.
- Crea una nueva clase llamada
SignalMessagecon 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.
- Copia el siguiente código y pégalo debajo del código que ya tienes en tu
MainActivitydespués de la claseonCreatefunció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.
- En el
MainActivityactualice el final de la claseonCreatepara añadir un receptor a la funciónEditTextViewque utiliza elsendMessagefunció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:
- Abra el
activity_main.xmlarchivo de diseño (res > diseño). - Abre la vista de código.
- 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>
- Crea un nuevo archivo de diseño llamado
message_single_local.xmlcon 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>
- Duplica el
message_single_local.xml, llámalomessage_single_remote.xmly cambiar la gravedad astart. - Añadir un adaptador para el historial de mensajes
ListView, crea una clase llamadaSignalMessageAdaptercon 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.