最後に着信があったときに表示するActivityを実装しましょう。このActivityはTwilioから接続要求があったときに自動で起動するActivityです。今回は着信を許可するボタンと拒否するボタンを置き、着信があったときに受け取るか拒否するか選べるようにします。以下のようなレイアウトになります。
それでは、Activityを実装しましょう。「IncomingActivity」という名前でクラスを新規作成し、以下のように実装します。
- package jp.classmethod.android.sample.twiliophone;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import com.twilio.client.Connection;
- import com.twilio.client.Device;
- public class IncomingActivity extends Activity implements OnClickListener {
- private Connection mConnection;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_incoming);
- // IntentからConnectionを受け取る
- Intent intent = getIntent();
- Device device = intent.getParcelableExtra(Device.EXTRA_DEVICE);
- Connection connection = intent.getParcelableExtra(Device.EXTRA_CONNECTION);
- if (device != null && connection != null) {
- intent.removeExtra(Device.EXTRA_DEVICE);
- intent.removeExtra(Device.EXTRA_CONNECTION);
- if (mConnection != null) {
- mConnection.disconnect();
- }
- mConnection = connection;
- }
- findViewById(R.id.accept).setOnClickListener(this);
- findViewById(R.id.reject).setOnClickListener(this);
- }
- @Override
- protected void onPause() {
- super.onPause();
- if (mConnection != null) {
- // Activityから離れたら切断する
- mConnection.disconnect();
- }
- }
- @Override
- public void onClick(View view) {
- switch (view.getId()) {
- case R.id.accept:
- if (mConnection != null) {
- // 接続を許可し、通話を開始する
- mConnection.accept();
- }
- break;
- case R.id.reject:
- if (mConnection != null) {
- if (mConnection.isIncoming()) {
- // 接続を拒否する
- mConnection.reject();
- } else {
- // 通話中の場合は切断する
- mConnection.disconnect();
- }
- }
- finish();
- break;
- }
- }
- }
IncomingActivityでは、まずonCreate()でIntentからDeviceインスタンスとConnectionインスタンスを受け取ります。これらはTwilioClientServiceが着信があったときに生成してくれるインスタンスで、Connectionインスタンスを使って着信のあった接続の許可(または拒否)を処理できます。
次に着信を受けるボタン(「accept」というID)と着信を拒否するボタン(「reject」というID)にOnClickListenerをセットします。着信を受けるボタンではConnectionインスタンスのaccept()メソッドを呼び出し、着信を許可して通話を開始します。着信を拒否するボタンではreject()メソッドを呼び出し、着信を拒否します。
また、通話中の場合はdisconnect()メソッドを呼び出して通話を切断するようにしておきましょう。
さらに、onPause()のときにもdisconnect()メソッドを呼び出し、接続を切断するようにしておきましょう。こうすることで通話中のときにIncomingActivityから離れたときに自動的に切断されるようになります。
これで、すべての実装が終わりました。クライアントアプリを実行し、通話を試してみましょう。Android端末が2台必要ですので、1台はエミュレータで実行し、もう1台は実機で実行します。
エミュレータ・実機のそれぞれ別々のクライアント名でTwilioに認証し、エミュレータ側から実機のクライアント名へ発信してみます。
実機側でIncomingActivityが表示されれば成功です。通話ボタンを押すと、エミュレータと通話できるようになります。
第2回、第3回はTwilioを使ったアプリを作ってみました。Twilioは「サーバサイドで電話システムを構築するサービス」という印象が強いですが、クライアントと組み合わせることで新しいコミュニケーションサービスを構築できます。コミュニケーション機能が必要なアプリに使ってみてはいかがでしょうか。
Copyright © ITmedia, Inc. All Rights Reserved.
Smart & Social 髫ェ蛟�スコ荵斟帷ケ晢スウ郢ァ�ュ郢晢スウ郢ァ�ー