連載
» 2013年08月02日 18時00分 公開

TwilioならLINEみたいな通話機能をカンタン実装できる!Androidアプリちょい足し開発レシピ(3)(4/4 ページ)

[諏訪悠紀,アンダースコア]
前のページへ 1|2|3|4       

着信したときに表示するActivityの実装

 最後に着信があったときに表示するActivityを実装しましょう。このActivityはTwilioから接続要求があったときに自動で起動するActivityです。今回は着信を許可するボタンと拒否するボタンを置き、着信があったときに受け取るか拒否するか選べるようにします。以下のようなレイアウトになります。

図4 着信用の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に認証し、エミュレータ側から実機のクライアント名へ発信してみます。

図5 エミュレータの実行画面

 実機側でIncomingActivityが表示されれば成功です。通話ボタンを押すと、エミュレータと通話できるようになります。

もっとコミュニケーション!

 第2回、第3回はTwilioを使ったアプリを作ってみました。Twilioは「サーバサイドで電話システムを構築するサービス」という印象が強いですが、クライアントと組み合わせることで新しいコミュニケーションサービスを構築できます。コミュニケーション機能が必要なアプリに使ってみてはいかがでしょうか。

著者プロフィール

諏訪悠紀

アンダースコア株式会社でAndroidを中心としたモバイルアプリのデザイン・開発に携わっています。


ブログ


前のページへ 1|2|3|4       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。