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.
- Erstellen Sie eine neue Klasse namens
SignalMessagemit 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.
- Kopieren Sie den folgenden Code und fügen Sie ihn unter dem bestehenden Code in Ihrem
MainActivityKlasse nach deronCreateFunktion:
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.
- In der
MainActivityKlasse, aktualisieren Sie das Ende deronCreateFunktion, um einen Hörer zurEditTextViewdie diesendMessageFunktion:
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:
- Öffnen Sie die
activity_main.xmlLayout-Datei (res > layout). - Öffnen Sie die Codeansicht.
- 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>
- Erstellen Sie eine neue Layoutdatei mit dem Namen
message_single_local.xmlmit 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>
- Duplizieren Sie die
message_single_local.xmlnennen Sie esmessage_single_remote.xmlund ändern Sie die Schwerkraft instart. - Hinzufügen eines Adapters für den Nachrichtenverlauf
ListViewerstellen Sie eine Klasse namensSignalMessageAdaptermit 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.