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

» 2013年08月02日 18時00分 公開
[諏訪悠紀アンダースコア]
前のページへ 1|2|3|4       

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

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

図4 着信用のActivityのレイアウト

 それでは、Activityを実装しましょう。「IncomingActivity」という名前でクラスを新規作成し、以下のように実装します。

  1. package jp.classmethod.android.sample.twiliophone;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import com.twilio.client.Connection;
  8. import com.twilio.client.Device;
  9. public class IncomingActivity extends Activity implements OnClickListener {
  10. private Connection mConnection;
  11. @Override
  12. protected void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.activity_incoming);
  15. // IntentからConnectionを受け取る
  16. Intent intent = getIntent();
  17. Device device = intent.getParcelableExtra(Device.EXTRA_DEVICE);
  18. Connection connection = intent.getParcelableExtra(Device.EXTRA_CONNECTION);
  19. if (device != null && connection != null) {
  20. intent.removeExtra(Device.EXTRA_DEVICE);
  21. intent.removeExtra(Device.EXTRA_CONNECTION);
  22. if (mConnection != null) {
  23. mConnection.disconnect();
  24. }
  25. mConnection = connection;
  26. }
  27. findViewById(R.id.accept).setOnClickListener(this);
  28. findViewById(R.id.reject).setOnClickListener(this);
  29. }
  30. @Override
  31. protected void onPause() {
  32. super.onPause();
  33. if (mConnection != null) {
  34. // Activityから離れたら切断する
  35. mConnection.disconnect();
  36. }
  37. }
  38. @Override
  39. public void onClick(View view) {
  40. switch (view.getId()) {
  41. case R.id.accept:
  42. if (mConnection != null) {
  43. // 接続を許可し、通話を開始する
  44. mConnection.accept();
  45. }
  46. break;
  47. case R.id.reject:
  48. if (mConnection != null) {
  49. if (mConnection.isIncoming()) {
  50. // 接続を拒否する
  51. mConnection.reject();
  52. } else {
  53. // 通話中の場合は切断する
  54. mConnection.disconnect();
  55. }
  56. }
  57. finish();
  58. break;
  59. }
  60. }
  61. }

 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.

スポンサーからのお知らせPR

Smart & Social 髫ェ蛟�スコ荵斟帷ケ晢スウ郢ァ�ュ郢晢スウ郢ァ�ー

隴幢スャ隴鯉ス・隴帷」ッ菫」

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

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

メールマガジン登録

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