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.
- Créer une nouvelle classe appelée
SignalMessageavec 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.
- Copiez le code suivant et collez-le sous le code existant dans votre
MainActivityaprès la classeonCreatefonction :
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.
- Dans le cadre de la
MainActivitymettre à jour la fin de la classeonCreatepour ajouter un écouteur à la fonctionEditTextViewqui utilise lesendMessagefonction :
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 :
- Ouvrir le
activity_main.xml(res > layout). - Ouvrez la vue du code.
- 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>
- Créer un nouveau fichier de mise en page appelé
message_single_local.xmlavec 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>
- Dupliquer le
message_single_local.xmll'appelermessage_single_remote.xmlet modifiez la gravité enstart. - Ajouter un adaptateur pour l'historique des messages
ListViewcréer une classe appeléeSignalMessageAdapteravec 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.