Android

Enviando um sinal

Agora que você se conectou à sessão e possui um objeto de sessão, já pode enviar um Signal. Os Signals são textos ou dados arbitrários enviados em uma sessão, que podem ser direcionados a um cliente específico ou a todos os clientes conectados. Você pode saber mais sobre eles na Guia do desenvolvedor do Vonage Video Signaling. Neste tutorial, você enviará uma mensagem de texto.

  1. Crie uma nova classe chamada SignalMessage com 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;
    }
}

Essa classe será usada para exibir os sinais na interface do usuário.

  1. Copie o código a seguir e cole-o abaixo do código existente no seu MainActivity aula depois da onCreate função:
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 adiciona uma função que será chamada a partir da interface do usuário. session.signal é chamado para enviar a mensagem pelo Signal. session.signal recebe o tipo do Signal e alguns dados. O tipo é opcional, mas pode ser usado para diferenciar os tipos de Signals em seu aplicativo. Se o Signal for enviado com sucesso, ele é adicionado à matriz de mensagens que a interface do usuário está utilizando.

  1. No MainActivity classe, atualize o final do onCreate função para adicionar um ouvinte ao EditTextView que utiliza o sendMessage função:
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;
    }
});

Quando o EditTextView emite uma ação de conclusão, o sendMessage A função será chamada. Agora é hora de atualizar a interface do usuário:

  1. Abra o activity_main.xml arquivo de layout (res > layout).
  2. Abra a visualização do código.
  3. Copie este XML sobre o layout 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. Crie um novo arquivo de layout chamado message_single_local.xml com 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. Duplique o message_single_local.xml, vamos chamá-lo de message_single_remote.xml, e alterar a gravidade para start.
  2. Adicionar um adaptador para o histórico de mensagens ListView, crie uma classe chamada SignalMessageAdapter com 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();
  }
}

Os adaptadores são usados para preencher as visualizações em um ListView, isso define uma classe personalizada para os Signals. Certifique-se de importar todas as classes necessárias.

Bate-papo básico por texto

Siga este tutorial para criar um chat de texto básico do zero usando a Video API da Vonage. Essa é a maneira mais rápida de desenvolver uma prova de conceito para essa funcionalidade na plataforma de vídeo.

Etapas
1
Visão geral
2
Antes de começar
3
Configurar um aplicativo de vídeo da Vonage
4
Criação do projeto
5
Configurando a autenticação
6
Conectando-se à sessão
7
Enviando um sinal
8
Recebimento de um sinal
9
Testando seu código
10
Conclusão