Android

Envoi d'un signal

Maintenant que vous vous êtes connecté à la session et que vous disposez d'un objet de session, vous pouvez envoyer un signal. Les signaux sont des textes ou des données arbitraires qui sont envoyés dans une session et qui peuvent être envoyés à un client spécifique ou à tous les clients connectés. Pour en savoir plus, consultez la section Guide du développeur Vonage Video Signaling. Pour ce tutoriel, vous allez envoyer du texte.

  1. Créer une nouvelle classe appelée SignalMessage avec ce code :
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;
    }
}

Cette classe sera utilisée pour afficher les signaux dans l'interface utilisateur.

  1. Copiez le code suivant et collez-le sous le code existant dans votre MainActivity après la classe onCreate fonction :
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("");
}

Ce code ajoute une fonction qui sera appelée depuis l'interface utilisateur. session.signal est appelée pour envoyer le texte sous forme de signal. session.signal prend le type de signal et quelques données. Le type est facultatif mais peut être utilisé pour différencier les types de signaux dans votre application. Si le signal est envoyé avec succès, il est ajouté au tableau des messages utilisés par l'interface utilisateur.

  1. Dans le cadre de la MainActivity mettre à jour la fin de la classe onCreate pour ajouter un écouteur à la fonction EditTextView qui utilise le sendMessage fonction :
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;
    }
});

Lorsque le EditTextView émet une action accomplie, la fonction sendMessage sera appelée. Il est maintenant temps de mettre à jour l'interface utilisateur :

  1. Ouvrir le activity_main.xml (res > layout).
  2. Ouvrez la vue du code.
  3. Copiez ce XML sur la mise en page existante :
  <?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. Créer un nouveau fichier de mise en page appelé message_single_local.xml avec ce 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. Dupliquer le message_single_local.xmll'appeler message_single_remote.xmlet modifiez la gravité en start.
  2. Ajouter un adaptateur pour l'historique des messages ListViewcréer une classe appelée SignalMessageAdapter avec ce code :
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();
  }
}

Les adaptateurs sont utilisés pour alimenter les vues d'une ListView, qui en définit une personnalisée pour les signaux. Veillez à importer toutes les classes nécessaires.

Chat textuel de base

Suivez ce tutoriel pour créer un chat textuel de base à partir de zéro en utilisant l'API Video de Vonage. C'est la façon la plus rapide de construire une preuve de concept pour cette fonctionnalité sur la plateforme vidéo.

Étapes
1
Vue d'ensemble
2
Avant de commencer
3
Configurer une application vidéo de Vonage
4
Création du projet
5
Configuration de l'authentification
6
Connexion à la session
7
Envoi d'un signal
8
Réception d'un signal
9
Tester votre code
10
Conclusion