Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

VDC 5th - NTTドコモ ハンズオン資料

971 views

Published on

第五回ビュージックス デベロッパーズ カンファレンスで利用した資料になります。

Published in: Education
  • Be the first to comment

  • Be the first to like this

VDC 5th - NTTドコモ ハンズオン資料

  1. 1. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 1 デバイスコネクトWebAPIによる M100向けWeb開発の実現 【ハンズオン①】
  2. 2. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved WebAPIにより、スマートフォンアプリやWebブラウザからの様々な ウェアラブル・IoT機器利用を実現するフレームワーク 1. デバイスコネクトWebAPIとは スマートウォッチ スマートグラス HDMIドングル 健康機器 無線LAN搭載カメラ スマートトイホームコントロール スマホ アプリ Web アプリ 2 S社スマートウォッチ Androidホスト Pebble S社Wifiカメラ ヘルスケア AndroidWear ・ ・ ・ プラグイン 対応機器 W e b A P I スマートフォン/タブレット(Android、iOS) 個々のデバイスの開発環境・ 通信プロトコルの差異を吸収 スマートフォン上で動作する 擬似的なWebAPIにより、OSに 依存しない共通動作を実現 デバイスコネクト
  3. 3. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 1.1 従来のコンテンツの実現方法 3 Webアプリ (HTML5+Javascript) WebView フレームワーク ライブラリ Kernel デバイス ネイティブ アプリ スマートフォンOS ハイブリッドアプリ ネイティブ アプリ同様に 任意の機能 が利用可能 任意の機能 が利用可能 ネイティブ/ハイブリッドアプリ からのデバイス利用 Webアプリ (HTML5+Javascript) Webブラウザ フレームワーク ライブラリ Kernel デバイス スマートフォンOS インターネット上のWebサイト Webアプリ (HTML5+Javascript) Webアプリ (HTML5+Javascript) 利用できる 機能がWeb ブラウザの 仕様に依存 HTML5で 規定された デバイスAPI のみ 一般的なWebアプリ(Webブラウザ) からのデバイス利用 ・ネイティブアプリ ・・・OS、開発環境に依存 ・ハイブリッドアプリ ・・・制限が少ないが、機能は組み込むWebviewフレームワークに依存し、開発言語も限られる ・ブラウザ(HTML5) ・・・機能がブラウザでできる事に限られる
  4. 4. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved ・スマートフォン上で動作する仮想サーバによりIP層を経由することでブラウザからでも 高度な機能を実現 ・アプリからも同様に利用可能 1.2 デバイスコネクトでの仕組み 4 フレームワーク ライブラリ Kernel デバイス Android OS デバイスコネクトWebAPI (ネイティブアプリ) 仮想サーバ IPネット ワーク層 Webブラウザ インターネット上のWebサイト Webアプリ (HTML5+Javascript) Webアプリ (HTML5+Javascript) Webアプリ (HTML5+Javascript) IP-NW経由 で仮想サーバに アクセス ネイティブ アプリとして 任意の機能 が利用可能 拡張プラグインC 拡張プラグインB 拡張プラグインA デバイスアクセス要求 を各デバイスの制御 命令に変換 (プラグインで拡張)
  5. 5. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 5 1.3 様々な観点からのセキュリティ対策も実施 http://member.openmobilealliance.org/ftp/public_documents/cd/CD-GotAPI/2015/ OMA-CD-GotAPI-2015-0003R01-INP_Introduction_to_GotAPI_1.0__Tutorial_.zip
  6. 6. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 6 ・デバイスコネクトの実行環境を用意すれば、 Webサイト としてコンテンツを作成してM100から利用可能 ・M100上だけでなく、PCやスマートフォンのWebブラウザ からもM100が制御できる ・OMA※1にてGotAPI※2として国際標準規格化を実現、 MWC2015※3ではOMAブースにてVuzix社がデモ出展 ※1 Opne Mobile Alliance 携帯電話の標準化団体 ※2 GotAPI:Generic Open Terminal API ※3 モバイル関連では世界最大規模の展示会 1.4 デバイスコネクトのM100での利用
  7. 7. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 7 ・スマートフォンをハブにして腕時計型の心拍数計の情報をM100に表示 ・同時にPCからM100のカメラ映像を遠隔モニタリング このようなデモがWeb開発の知識のみでつくれます! 1.5 MWC2015でのVuzix社デモ
  8. 8. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 8 1.6 今後の予定 ・デバイスコネクトWebAPI相当のアプリをVuzix社の M100用マーケットでも近日中に公開予定 ⇒Androidの開発環境を意識しなくてもアプリの インストールのみでWeb開発が可能に
  9. 9. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 9 事前準備 ・開発用のPC環境※ (M100用マーケットでのアプリ公開後は開発環境は不要) ・Vuzix M100 ※Vuzix M100 アプリ開発マニュアルをご参照ください。 第1章 M100をADBで認識する http://www.vuzix.jp/dev/setting-for-adb.html 第2章 Android Screen Monitorの使い方 http://www.vuzix.jp/dev/asm.html 第3章 システムアップデート方法 http://www.vuzix.jp/dev/system-update.html Android SDKの場所の確認方法 http://www.vuzix.jp/dev/general-settings.html 2. デモWebアプリでの動作確認
  10. 10. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 10 1.GitHubからPCにデモ用ファイルのダウンロード https://github.com/DeviceConnect/DeviceConnect-Docs/blob/master/Bin/demoWebSite.zip 2.「ADB Install」コマンドで2つのアプリ(デバイスコネクト本体、デバイスコネクトAndroid Hostプラグイン)をM100にインストール > adb install .¥demoWebSite¥apk¥dConnectManager.apk[改行] Successと出たら成功 > adb install .¥demoWebSite¥apk¥dConnectDeviceHost.apk[改行] Successと出たら成功 2.1 デバイスコネクトWebAPIのインストール ( M100用マーケットでのアプリ公開後はマーケットからのダウンロードのみ) PC作業 ダウンロードファイル demoWebSite ┣[apk] ┃ ┣dConnectManager.apk ┃ ┣dConnectDeviceHost.apk ┃ ┗その他のAPKファイル ┃ ┣[css] ┣[js] ┗index.html
  11. 11. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 11 2.2 M100のIPアドレスの確認 1.M100の無線LAN接続を確認(PCと同一ネットワークにしておく) 2.M100のIPアドレスの確認 M100作業
  12. 12. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 12 2.3 デモアプリの外部アクセスの許可(実利用時にはセキュリティ考慮が必要) 1.デバイスコネクトアプリを起動し、メニューの下の方にある 「Allow External IP」のチェックを有効化、「Local OAuth」のチェックを無効化 2.メニュー最初のDevice Connect ManagerをONに設定 して、サービスを有効化(有効にすると設定変更ができ ないので、変更する場合はいったんOFFにする) 補足 後述するデモの一部機能は「Local OAuth」が有効に なっていないと現状動作しません(後日無効でも利用 できるように対応予定) M100作業 スクロール
  13. 13. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 13 PC作業 2.4 PCでデモ用Webサイトを開く(Chromeブラウザを想定) 1.Chromeブラウザでダウンロードファイルのindex.htmlを開く ※Chromeブラウザのメニュー⇒その他のツール⇒JavaScriptコンソールで、コンソールから具体的なREST APIの動作も見れます ダウンロードファイル demoWebSite ┣[apk] -APKファイル ┣[css] -スタイルシート ┣[js] -javascript ┃ ┗index.html 2.URLの最後に”?ip=[M100のIPアドレス]#demo”と追加して移動
  14. 14. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 2.5 デモ用Webサイトの動作確認:機能リストの表示 1.デモ画面でSearch Deviceを 選ぶとDevice ListにHostが 表示される。 2.M100の画面でACCEPTを 選ぶとデモ画面に機能の リストが表示される PC画面 M100画面 14 PC画面
  15. 15. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 15 2.6 デモ用Webサイトの動作確認:PCの画像をM100で表示 PC画面 M100画面1.機能リストからcanvas、Canvas DrawImageを選択 2.ファイルを選択で画像を選択 3.mode:「最大化して画像描画」に変更してUploadを選択 4. 画像がM100画面に表示される ① ① ② ② ③ ③ ④
  16. 16. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 16 2.7 デモ用Webサイトの動作確認:M100のカメラ映像をWebブラウザで表示 1.機能リストからmediastream_recording、 Previewを選択 2.Webブラウザの画面にM100のカメラ映像が 表示される(撮影中はM100画面の左上に PREVIEWと表示される) PC画面 M100画面
  17. 17. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 17 3. REST APIとしての動作確認 M100をWebAPI(REST API)として利用できる=開発環境にも依存しない ⇒cURL(コンソールからHTTPリクエストが行えるツール http://curl.haxx.se/)により 動作を確かめます ※簡略化のために、Local Oauth:OFFを前提として進めます(実利用時にはセキュリティ考慮が必要)。 準備(Windowsの場合) 1.プログラムとファイルの検索で ”cmd”と入力してコンソールの起動 2.cURLをダウンロードしてフォルダを作成 “cd [フォルダの場所]”でcurl.exeのパスに移動 cmd[改行] PC画面
  18. 18. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 18 デバイスコネクトWebAPIが使えるかどうかの確認(availability) リクエスト >curl -X GET -H "Origin: http://localhost" http://192.168.13.6:4035/gotapi/availability レスポンス {"product":"Device Connect Manager","result":0,"version":"2.0.0"} 使える機能の確認(servicediscovery) リクエスト >curl -X GET -H "Origin: http://localhost" http://192.168.13.6:4035/gotapi/servicediscovery レスポンス {"product":"Device Connect Manager","result":0, "services":[{"id":"Host.e87e3213b730843a437ff6c676899df0.localhost.deviceconnect.org", "scopes":["file_descriptor","phone","media_player","connect","settings","deviceorientation", "canvas","authorization","proximity","system","touch","file","serviceinformation","battery", "mediastream_recording","keyevent","vibration","notification","servicediscovery"], "config":"HostConfig","type":"Wifi","online":true,"name":"Host"}],"version":"2.0.0"} >curl -X GET -H "Origin: http://localhost" http://192.168.13.6:4035/gotapi/servicediscovery curlコマンド HTTP GET Originの指定 (セキュリティ対策:近日中に 検証では不要にする予定) M100のIPアドレス 3.1 REST APIとしての動作確認:利用できる機能の確認 プラグインの名前 サービスID 利用できる 機能のリスト
  19. 19. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 19 バッテリーの残量を知る リクエスト >curl -X GET -H “Origin: http://localhost” http://192.168.13.6:4035/gotapi/battery ?serviceId=Host.e87e3213b730843a437ff6c676899df0.localhost.deviceconnect.org レスポンス {“charging”:true,“product”:“Device Connect Manager","result":0, "level":0.8700000047683716,"version":"2.0.0"} https://github.com/DeviceConnect/DeviceConnect-JS/wiki/2.13.Notification#notification_post 3.2 REST APIとしての動作確認:機能の利用例 残り87% M100に通知を送る リクエスト >curl -X POST -H “Origin: http://localhost” http://192.168.13.6:4035/gotapi/notification/notify -F "serviceId=Host.e87e3213b730843a437ff6c676899df0.localhost.deviceconnect.org“ -F "type=3" -F "body=%E3%83%86%E3%82%B9%E3%83%88“ レスポンス {"product":"Device Connect Manager","notificationId":69699,"result":0,"version":"2.0.0"} URLエンコードされた文字列(ここでは「テスト」を表している) M100上に メッセージが 表示される サービスID サービスID M100画面
  20. 20. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved ドコモデベロッパーサポートの APIによる認識機能の利用 20 【ハンズオン②】
  21. 21. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 2.まず最初に「ログイン/新規登録」から画面の指示に従ってアカウントを登録 1.Webブラウザからドコモデベロッパーサポートにアクセス 1.1 利用準備:アカウント登録 21 ドコモデベロッパーサポートURL: https://dev.smt.docomo.ne.jp/
  22. 22. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved アカウントを登録し、ログインすると、マイページにアクセスできるようになる 1.2 利用準備:ログイン 22
  23. 23. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 1.マイページから 「新規アプリケーション申請へ」を選択 2.「アプリケーション登録」の各情報を入力 ⇒「API機能選択へ」ボタン ⇒各APIの【利用するAPI機能】を選択 ⇒「利用申請する」ボタン 3.完了画面まで入力が終わると 【開発用APIキー】が発行される 申請情報入力画面 1.3 利用準備:API申請 23
  24. 24. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved マイページの「アプリ/APIの申請・管理」から API Keyの確認を確認する アプリケーション名のリンク から登録情報や利用APIの 変更が行える API Key情報 (他に知られないように すること) 1.4 API Key情報の確認 24
  25. 25. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 一部のREST API形式のものは、APIコンソールから動作が確認できます 2.1 APIコンソールからの動作確認 25
  26. 26. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved HTTPリクエストボディのテ キストを書き換えて実行 26 2.2 APIコンソールからの動作確認:雑談対話API
  27. 27. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 音声認識【Powered by FUETREK】 ※REST API形式ではなく、Android/iOS用SDKとして提供されているAPI 「API/ツールの概要」の音声認識から、 Speech_Recognition_API_Android_SDK_v1.1.0.zipをダウンロード 27 3.1 Android Studioからの音声認識サンプルの利用
  28. 28. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved Speech_Recognition_API_Android_SDK_v1.1.0.zipの構成 Speech_Recognition_API_Android_SDK_v1.1.0 ├─document ├─filetree.txt ├─lib └─sample └─project ←これの名前を変えてAndroid Studio用 のプロジェクト保存フォルダに格納 3.2 Android Studio用サンプルプロジェクトの準備 28
  29. 29. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 1.Android Studioのスタート画面から「Import Non-Android Studio project」を選択し、 2.先ほどのサンプルプロジェクトのフォルダを選択 3.ダイアログ確認・指示に従ってプロジェクトを開く(基本的に変更不要) 3.2 Android Studio用サンプルプロジェクトの準備 29
  30. 30. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 開いた後にエラーとなった場合 30
  31. 31. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 31 開いた後にエラーとなった場合
  32. 32. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved APIキーを登録情報のものに変更してからRun ‘app’でビルド・実行 3.3 Android Studioでのサンプルプロジェクトのビルド 32
  33. 33. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved Start recognitionボタンを押すことで音声認識が試せます(要ネットワーク接続) 3.4 M100での動作画面 33
  34. 34. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 34 音声合成APIのページからサンプルコード(文字並べ替え)をダウンロード (ZIPファイル内のNarabete_HiraganaフォルダがAndroidのプロジェクト) 3.5 音声合成のサンプルの利用
  35. 35. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 35 1.Android Studioのスタート画面から「Import Non-Android Studio project」を選択し、 2.先ほどのサンプルプロジェクトのフォルダを選択 3.ダイアログ確認・指示に従ってプロジェクトを開く(基本的に変更不要) 3.6 Android Studio用サンプルプロジェクトの準備
  36. 36. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved android { ・ ・ ・ packagingOptions { exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/license.txt' exclude 'META-INF/notice.txt' exclude 'META-INF/LICENSE' exclude 'META-INF/NOTICE' } } dependencies { compile 'com.android.support:support-v4:21.0.3' compile files('libs/docomo-aitalk-android-sdk-1.0.1.jar') compile files('libs/docomo-common-android-sdk-narabete-1.0.2.jar') compile files('libs/jackson-annotations-2.2.3.jar') compile files('libs/jackson-core-2.2.3.jar') compile files('libs/jackson-databind-2.2.3.jar') } Build.gradle(Module: app)に以下のように追記 ※ドコモデベロッパーサポートのEclipse向けのサンプルプロジェクトを Android studioで動かす場合、他でも必要な場合がある 音声合成【Powered by AI】 36 3.7 Android Studio用サンプルプロジェクトの設定情報の修正
  37. 37. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 37 1.“TextSpeaker.java“のAPIキーを登録情報のものに変更 2.Run ‘app’でビルド・実行 3.8 Android Studioでのサンプルプロジェクトのビルド
  38. 38. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 38 さきほどの音声認識サンプルに 音声合成機能を組み込む 【おまけ】
  39. 39. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 39 【音声合成】のサンプルから、【音声認識】のサンプルに 必要なライブラリ(jarファイル)をコピー
  40. 40. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 40 【音声認識】のサンプルのBuild.gradle(Module: app)に以下のように追記
  41. 41. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 41 【音声合成】のサンプルから、【音声認識】のサンプルに “TextSperker.java”をコピー
  42. 42. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 42 【音声認識】のサンプルの MainActivityのimplementsに,TextSpeaker.OnErrorListenerを追加 //音声合成 public TextSpeaker mTextSpeaker = null; private static final String PREFERENCE_KEY_VOICE_TYPE_NAME = "voice_type_name"; //話者のキー private SharedPreferences mPreferences; //話者などの設定を永続的に保存するためのインスタンス //設定値などを永続的に保存するプリファレンスで用いるキー定数 private TextSpeaker.Error mLastSpeakError; //直前に発生した音声合成APIに関するエラー。 //同じ種類のエラーダイアログが連続して表示されないために用いる。 public class MainActivity extends Activity implements View.OnClickListener, FSRServiceEventListener ,TextSpeaker.OnErrorListener{ @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); の上に追加
  43. 43. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 43 【音声認識】のサンプルに、音声合成の初期化処理を追加 @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); の下に追加 //音声合成の準備 //プリファレンスの取得 mPreferences = getPreferences(MODE_PRIVATE); //現在の話者設定をプリファレンスから取得 String voiceTypeName = mPreferences.getString(PREFERENCE_KEY_VOICE_TYPE_NAME, "nothing"); TextSpeaker.VoiceType voiceType = TextSpeaker.findVoiceTypeEnum(voiceTypeName); if (voiceType == null) { voiceType = TextSpeaker.VoiceType.NOZOMI; } //デフォルトは nozomi //音声再生インスタンスの作成 mTextSpeaker = new TextSpeaker(this); mTextSpeaker.setPitch(1.0F); mTextSpeaker.setRange(1.5F); mTextSpeaker.setRate(1F); mTextSpeaker.setVolume(1.8F); mTextSpeaker.setVoiceType(voiceType); mTextSpeaker.setOnErrorListener(this); this.setAudioStreamType(AudioManager.STREAM_MUSIC); //音声の出力先は音楽用ストリームに指定
  44. 44. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 44 MainActivityに以下のメソッドを追加 ※依存関係(エラー)の解消はALT+Enterで /** * 合成音声の出力先ストリームをセットするメソッド。 * TextSpeakerにセットされるだけでなく、Activity#{@link #setVolumeControlStream(int)}が呼ばれることで、 * 物理音量キーによって該当ストリームの音量が変化するようになる * * @param streamType AudioManagerの定数 */ private void setAudioStreamType(int streamType) { this.mTextSpeaker.setStreamType(streamType); this.setVolumeControlStream(streamType); } /** * 現在の音声出力先の端末音量を返すメソッド * もし音声出力用のインスタンスがnullの場合は {@link AudioManager#STREAM_MUSIC}の音量を返す * * @return */ private int getDeviceVolumeOfVoice() { int volume = 0; AudioManager audioMgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE); if (mTextSpeaker == null) { volume = audioMgr.getStreamVolume(AudioManager.STREAM_MUSIC); } else { volume = audioMgr.getStreamVolume(mTextSpeaker.getStreamType()); } return volume; } /** * 合成音声の話者をセットするメソッド * * @param type */ public void setVoiceType(TextSpeaker.VoiceType type) { if (mTextSpeaker != null) { mTextSpeaker.setVoiceType(type); } } 利用するためのメソッドを追加(【音声合成】サンプルから部分的に流用)①
  45. 45. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 45 利用するためのメソッドを追加(【音声合成】サンプルから部分的に流用)② /** * TextSpeekerによる音声合成のエラーが通知されるメソッド * @param exception * @param errorCode */ @Override public void onSpeekError(Exception exception, String errorCode) { //エラーコード(文字列)から該当するエラーEnumを取得 TextSpeaker.Error error = TextSpeaker.findErrorEnum(errorCode); //今回のエラーと直近に発生したエラーが違う場合のみエラーダイアログを表示する。 //これは同種のエラーが何度もダイアログ表示されないようにするため。(やむなく音声無しでアプリを使用する場合など) if (error != mLastSpeakError) { //SimpleDialogFragment dialog = null; switch (error) { case SERVER_CONNECTION_ERROR: /* dialog = SimpleDialogFragment.getInstance(getString(R.string.error), getString(R.string.desc_of_connection_error));*/ break; case SERVER_OTHER_ERROR: case SERVER_LIMITATION_ERROR: /* dialog = SimpleDialogFragment.getInstance(getString(R.string.error), getString(R.string.desc_of_server_limited_error));*/ break; case INVALID_PARAMETER: case AUTHENTICATION_ERROR: case SDK_INSIDE_ERROR: case RESPONSE_DATA_ERROR: default: /*dialog = SimpleDialogFragment.getInstance(getString(R.string.error), getString(R.string.desc_of_fatal_error));*/ break; } //エラーダイアログの表示 /*if(dialog!=null){ dialog.setCancelable(false); dialog.show(getSupportFragmentManager(), "error"); }*/ }//end of if mLastSpeakError = error; //今回のエラーをフィールドに保存しておく }
  46. 46. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 46 case NotifyEndRecognition: // 認識完了 Log.d(TAG, "NotifyEndRecognition"); try { // 認識結果の取得 final RecognizeEntity recogize = mFsrService.getSessionResultStatus(BACKEND_TYPE); if (recogize.getCount() > 0) { final ResultInfoEntity info = mFsrService.getSessionResult(BACKEND_TYPE, 1); final String result = info.getText(); sHandler.sendMessage(sHandler.obtainMessage(MyHandler.HANDLE_SHOW_MESSAGE, result)); mTextSpeaker.speak(info.getText(), 0); } else { sHandler.sendMessage(sHandler.obtainMessage(MyHandler.HANDLE_SHOW_MESSAGE, "結果無し")); mTextSpeaker.speak("結果無し", 0); } notifyEventの認識完了の処理に読み上げるための記述を追加して、 Run ‘app’でビルド・実行

×