Java

Aussenden eines Signals

Nachdem Sie nun eine Verbindung zur Sitzung hergestellt haben und über ein Sitzungsobjekt verfügen, können Sie nun ein Signal senden. Signale sind beliebige Texte oder Daten, die in einer Sitzung an einen bestimmten Client oder an alle verbundenen Clients gesendet werden können. Mehr über sie erfahren Sie in der Vonage Video Signaling Entwicklerhandbuch. In diesem Lernprogramm werden Sie Text senden.

  1. Erstellen Sie eine neue Klasse namens SignalMessage mit diesem 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;
    }
}

Diese Klasse wird verwendet, um die Signale in der Benutzeroberfläche anzuzeigen.

  1. Kopieren Sie den folgenden Code und fügen Sie ihn unter dem bestehenden Code in Ihrem MainActivity Klasse nach der onCreate Funktion:
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("");
}

Dieser Code fügt eine Funktion hinzu, die von der Benutzeroberfläche aus aufgerufen wird. session.signal wird aufgerufen, um den Text als Signal zu senden. session.signal nimmt den Typ des Signals und einige Daten auf. Der Typ ist optional, kann aber verwendet werden, um zwischen den Signaltypen in Ihrer Anwendung zu unterscheiden. Wenn das Signal erfolgreich gesendet wurde, wird es dem Array der Nachrichten hinzugefügt, das die Benutzeroberfläche verwendet.

  1. In der MainActivity Klasse, aktualisieren Sie das Ende der onCreate Funktion, um einen Hörer zur EditTextView die die sendMessage Funktion:
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;
    }
});

Wenn die EditTextView eine erledigte Aktion ausgibt, wird die sendMessage Funktion aufgerufen werden. Nun ist es an der Zeit, die Benutzeroberfläche zu aktualisieren:

  1. Öffnen Sie die activity_main.xml Layout-Datei (res > layout).
  2. Öffnen Sie die Codeansicht.
  3. Kopieren Sie diese XML-Datei über das bestehende Layout:
  <?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. Erstellen Sie eine neue Layoutdatei mit dem Namen message_single_local.xml mit diesem 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. Duplizieren Sie die message_single_local.xmlnennen Sie es message_single_remote.xmlund ändern Sie die Schwerkraft in start.
  2. Hinzufügen eines Adapters für den Nachrichtenverlauf ListViewerstellen Sie eine Klasse namens SignalMessageAdapter mit diesem 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();
  }
}

Adapter werden verwendet, um die Ansichten in einer ListViewDies definiert eine benutzerdefinierte Klasse für die Signale. Stellen Sie sicher, dass Sie alle benötigten Klassen importieren.

Einfacher Text-Chat

In diesem Tutorial lernen Sie, wie Sie mit der Video API von Vonage einen einfachen Text-Chat von Grund auf aufbauen. Dies ist der schnellste Weg, um einen Proof of Concept für diese Funktionalität auf der Videoplattform zu erstellen.

Schritte
1
Übersicht
2
Bevor Sie beginnen
3
Konfigurieren einer Vonage Video-Applikation
4
Das Projekt erstellen
5
Authentifizierung einrichten
6
Verbinden mit der Sitzung
7
Aussenden eines Signals
8
Empfangen eines Signals
9
Testen Ihres Codes
10
Schlussfolgerung