RTコンポーネントの実装

ネームサーバーへの接続

 ネームサーバーへの接続は、NameServerConnectTaskクラスを使います。 NameServerConnectTaskクラスは AsyncTaskクラスを継承する形で、他の処理とは非同期で動きます。

/**
 * NameServerへの接続
 */
private void connectNameServer() {
        nameServerConnectTask = new NameServerConnectTask(this);
        nameServerConnectTask.setListener(new NameServerConnectListenerImpl()); // NameServer接続完了リスナーを登録
        nameServerConnectTask.setIpAddress("ネームサーバーアドレス");
        nameServerConnectTask.execute();                // ネームサーバーへの接続を開始する
}

 NameServerConnectTaskクラスは、インターフェースとして NameServerConnectListenerを実装しています。 setListener でリスナーを指定する事で、処理を受け取ることができます。

NameServerConnectListenerで受け取れるのは以下の処理です。

onConnected(); 接続成功
onConnectFailed(); 接続失敗
onConnectCanceled(); 接続キャンセル
private class NameServerConnectListenerImpl implements NameServerConnectListener {
        .
        .
        .
        public void onConnected() {
        }

RTコンポーネントのクラスの実装

 Serviceを親に持つRTCServiceを起動します。同時に RtcServiceConnection クラスをバインドします。

/**
 * RTCサービスを開始
 */
public void onConnected() {
        Intent intent = new Intent(RTMonAndroidSample.this, RTCService.class);
        startService(intent);
        serviceConnection = new RtcServiceConnection();
        bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
}

バインドが成功するとRtcServiceConnection.onServiceConnected が呼ばれます。

/**
 * RTCService接続処理
 */
private class RtcServiceConnection implements ServiceConnection {
        /**
         * RTCService bind完了
         */
        public void onServiceConnected(ComponentName className, IBinder service) {
                rtcService = ((RTCService.RTCServiceBinder) service).getService();

                // プロパティーを設定する
                rtcService.setProfiles(
                                RTMonAndroidSample_Profile.DefaultNameServer,RTMonAndroidSample_Profile.Name,
                                RTMonAndroidSample_Profile.ImplementationId,    RTMonAndroidSample_Profile.Type,
                                RTMonAndroidSample_Profile.Description,         RTMonAndroidSample_Profile.Version,
                                RTMonAndroidSample_Profile.Vendor,                      RTMonAndroidSample_Profile.Category,
                                String.valueOf(RTMonAndroidSample_Profile.execute_rate));
        }
        /**
         * RTCService終了処理
         */
        public void onServiceDisconnected(ComponentName className) {
        }
}

バインドが成功した時点で、RTCService に対して コンポーネントのコンフィグレーション等を渡します。

アクティビティの実装

 コンポーネントのアクティビティと呼ばれるメソッドをの実装をおこないます。 アクティビティは、コンポーネントの状態や外部のイベントに応じて実行されるメソッドです。 アクティビティの実装はRTCBaseクラスを継承し、オーバーライドして実装します。

onInitializeメソッドの実装例を以下に示します。

public class RTMonAndroidSample_impl extends RTCBase {
        @Override
        public int onInitialize() {
        .
        .
        .
                return ReturnCode.RTC_RTC_OK;
        }
}

アクティビティには、onInitialize以外に以下に示すメソッドが用意されています。

アクティビティの説明
アクション名 説明
onInitialize 初期化される際に一度だけ呼ばれます。
onActivated 非アクティブ状態からアクティブ化されるとき、一度だけ呼ばれます。
onExecute アクティブ状態時に周期的に呼ばれます。
onDeactivated アクティブ状態から非アクティブ化されるとき、一度だけ呼ばれます。
onAborting エラー状態に入る前に一度だけ呼ばれます。
onReset エラー状態からリセットされ、非アクティブ状態に遷移する際に一度だけ呼ばれます。
onError エラー状態にいる間、周期的に呼ばれます。
onFinalize コンポーネントの終了時に一度だけ呼ばれます。

戻り値は、ReturnCodeクラスで定義されている以下のコードを返します。

  • RTC_RTC_OK(正常終了)
  • RTC_RTC_ERROR(エラー発生)

なお、以下のアクティビティは、RTM on Androidでは非サポートとなり利用できません。

  • OnStateUpdate
  • OnRateChanged
  • OnStartup
  • OnShutdown