Android
シグナルを送る
セッションに接続し、セッション・オブジェクトを得たので、シグナルを送信することができます。シグナルとは、セッションで送信される任意のテキストやデータのことで、特定のクライアントや接続されているすべてのクライアントに送信することができます。シグナルについて詳しくは Vonage ビデオシグナリング開発者ガイド.このチュートリアルでは、テキストを送信します。
- という新しいクラスを作る。
SignalMessageこのコードで:
コピー
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;
}
}
このクラスはシグナルをUIに表示するために使用される。
- 以下のコードをコピーし、既存のコードの下に貼り付けます。
MainActivityクラスの後にonCreate関数である:
コピー
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("");
}
このコードでは、UIから呼び出される関数を追加している。 session.signal が呼び出され、テキストがシグナルとして送信される。 session.signal は、シグナルのタイプといくつかのデータを取ります。タイプはオプションですが、アプリ内でシグナルのタイプを区別するために使用できます。Signalが正常に送信されると、UIが使用しているメッセージの配列に追加されます。
- の中で
MainActivityクラスの末尾を更新する。onCreate関数を使ってEditTextViewを使用する。sendMessage関数である:
コピー
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;
}
});
そのとき EditTextView が実行されると sendMessage 関数が呼び出される。さて、UIを更新しよう:
- を開く。
activity_main.xmlレイアウトファイル(res > layout)。 - コードビューを開く。
- このXMLを既存のレイアウトの上にコピーする:
コピー
<?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>
- という名前の新しいレイアウトファイルを作成する。
message_single_local.xmlこの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>
- を複製する。
message_single_local.xmlと呼ぶ。message_single_remote.xmlそして、重力を次のように変更する。start. - メッセージ履歴用アダプタの追加
ListViewというクラスを作成する。SignalMessageAdapterこのコードで:
コピー
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();
}
}
アダプタは ListViewこれは、シグナルのカスタム・クラスを定義するものです。必要なクラスは必ずインポートしてください。
基本的なテキストチャット
このチュートリアルに従って、Vonage Video API を使用して基本的なテキストチャットをゼロから構築してください。これは、ビデオプラットフォーム上でこの機能の概念実証を構築する最も簡単な方法です。
手順
1
概要2
始める前に3
Vonageビデオアプリケーションの設定4
プロジェクトの作成5
認証の設定6
セッションへの接続7
シグナルを送る8
信号の受信9
コードのテスト10
結論