SlideShare uma empresa Scribd logo
1 de 46
Baixar para ler offline
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 1
デバイスコネクトWebAPIによる
M100向けWeb開発の実現
【ハンズオン①】
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に
依存しない共通動作を実現
デバイスコネクト
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) ・・・機能がブラウザでできる事に限られる
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
デバイスアクセス要求
を各デバイスの制御
命令に変換
(プラグインで拡張)
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
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での利用
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 7
・スマートフォンをハブにして腕時計型の心拍数計の情報をM100に表示
・同時にPCからM100のカメラ映像を遠隔モニタリング
このようなデモがWeb開発の知識のみでつくれます!
1.5 MWC2015でのVuzix社デモ
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 8
1.6 今後の予定
・デバイスコネクトWebAPI相当のアプリをVuzix社の
M100用マーケットでも近日中に公開予定
⇒Androidの開発環境を意識しなくてもアプリの
インストールのみでWeb開発が可能に
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アプリでの動作確認
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
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 11
2.2 M100のIPアドレスの確認
1.M100の無線LAN接続を確認(PCと同一ネットワークにしておく)
2.M100のIPアドレスの確認
M100作業
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作業
スクロール
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”と追加して移動
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved
2.5 デモ用Webサイトの動作確認:機能リストの表示
1.デモ画面でSearch Deviceを
選ぶとDevice ListにHostが
表示される。
2.M100の画面でACCEPTを
選ぶとデモ画面に機能の
リストが表示される
PC画面
M100画面
14
PC画面
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画面に表示される
①
①
②
②
③
③
④
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画面
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画面
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
利用できる
機能のリスト
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画面
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved
ドコモデベロッパーサポートの
APIによる認識機能の利用
20
【ハンズオン②】
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved
2.まず最初に「ログイン/新規登録」から画面の指示に従ってアカウントを登録
1.Webブラウザからドコモデベロッパーサポートにアクセス
1.1 利用準備:アカウント登録
21
ドコモデベロッパーサポートURL: https://dev.smt.docomo.ne.jp/
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved
アカウントを登録し、ログインすると、マイページにアクセスできるようになる
1.2 利用準備:ログイン
22
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved
1.マイページから
「新規アプリケーション申請へ」を選択
2.「アプリケーション登録」の各情報を入力
⇒「API機能選択へ」ボタン
⇒各APIの【利用するAPI機能】を選択
⇒「利用申請する」ボタン
3.完了画面まで入力が終わると
【開発用APIキー】が発行される
申請情報入力画面
1.3 利用準備:API申請
23
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved
マイページの「アプリ/APIの申請・管理」から
API Keyの確認を確認する アプリケーション名のリンク
から登録情報や利用APIの
変更が行える
API Key情報
(他に知られないように
すること)
1.4 API Key情報の確認
24
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved
一部のREST API形式のものは、APIコンソールから動作が確認できます
2.1 APIコンソールからの動作確認
25
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved
HTTPリクエストボディのテ
キストを書き換えて実行
26
2.2 APIコンソールからの動作確認:雑談対話API
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からの音声認識サンプルの利用
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
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved
1.Android Studioのスタート画面から「Import Non-Android Studio project」を選択し、
2.先ほどのサンプルプロジェクトのフォルダを選択
3.ダイアログ確認・指示に従ってプロジェクトを開く(基本的に変更不要)
3.2 Android Studio用サンプルプロジェクトの準備
29
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved
開いた後にエラーとなった場合
30
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 31
開いた後にエラーとなった場合
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved
APIキーを登録情報のものに変更してからRun ‘app’でビルド・実行
3.3 Android Studioでのサンプルプロジェクトのビルド
32
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved
Start recognitionボタンを押すことで音声認識が試せます(要ネットワーク接続)
3.4 M100での動作画面
33
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 34
音声合成APIのページからサンプルコード(文字並べ替え)をダウンロード
(ZIPファイル内のNarabete_HiraganaフォルダがAndroidのプロジェクト)
3.5 音声合成のサンプルの利用
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 35
1.Android Studioのスタート画面から「Import Non-Android Studio project」を選択し、
2.先ほどのサンプルプロジェクトのフォルダを選択
3.ダイアログ確認・指示に従ってプロジェクトを開く(基本的に変更不要)
3.6 Android Studio用サンプルプロジェクトの準備
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用サンプルプロジェクトの設定情報の修正
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 37
1.“TextSpeaker.java“のAPIキーを登録情報のものに変更
2.Run ‘app’でビルド・実行
3.8 Android Studioでのサンプルプロジェクトのビルド
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 38
さきほどの音声認識サンプルに
音声合成機能を組み込む
【おまけ】
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 39
【音声合成】のサンプルから、【音声認識】のサンプルに
必要なライブラリ(jarファイル)をコピー
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 40
【音声認識】のサンプルのBuild.gradle(Module: app)に以下のように追記
Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 41
【音声合成】のサンプルから、【音声認識】のサンプルに
“TextSperker.java”をコピー
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);
の上に追加
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); //音声の出力先は音楽用ストリームに指定
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);
}
}
利用するためのメソッドを追加(【音声合成】サンプルから部分的に流用)①
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; //今回のエラーをフィールドに保存しておく
}
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’でビルド・実行

Mais conteúdo relacionado

Destaque

Amazon lexを触ってみた
Amazon lexを触ってみたAmazon lexを触ってみた
Amazon lexを触ってみたYoichi Toyota
 
デバイス WebAPIによるスマートフォン周辺デバイスの活用
デバイス WebAPIによるスマートフォン周辺デバイスの活用デバイス WebAPIによるスマートフォン周辺デバイスの活用
デバイス WebAPIによるスマートフォン周辺デバイスの活用Device WebAPI Consortium
 
デバイスコネクトWebAPIの開発状況について
デバイスコネクトWebAPIの開発状況についてデバイスコネクトWebAPIの開発状況について
デバイスコネクトWebAPIの開発状況についてDevice WebAPI Consortium
 
NHK Linked Data API 〜つながる番組データを目指して〜
NHK Linked Data API 〜つながる番組データを目指して〜NHK Linked Data API 〜つながる番組データを目指して〜
NHK Linked Data API 〜つながる番組データを目指して〜API Meetup
 
ドコモオープンイノベーションの取り組みと提供APIのIoT展開について
ドコモオープンイノベーションの取り組みと提供APIのIoT展開についてドコモオープンイノベーションの取り組みと提供APIのIoT展開について
ドコモオープンイノベーションの取り組みと提供APIのIoT展開についてAPI Meetup
 
Amazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTips
Amazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTipsAmazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTips
Amazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTipsyuichi_komatsu
 
WatsonQA応用編~BluemixとWatson Engagement Advisor(WEA)連携~
WatsonQA応用編~BluemixとWatson Engagement Advisor(WEA)連携~ WatsonQA応用編~BluemixとWatson Engagement Advisor(WEA)連携~
WatsonQA応用編~BluemixとWatson Engagement Advisor(WEA)連携~ Harada Kazuki
 
IBM Bluemix × Watson でMashup Hackathon (API説明)
IBM Bluemix × Watson でMashup Hackathon (API説明)IBM Bluemix × Watson でMashup Hackathon (API説明)
IBM Bluemix × Watson でMashup Hackathon (API説明)Masaya Fujita
 
りんな風 女子高生Bot - docomo雑談対話API +α を使って 自分専用Botを作る -
りんな風 女子高生Bot - docomo雑談対話API +α を使って 自分専用Botを作る -りんな風 女子高生Bot - docomo雑談対話API +α を使って 自分専用Botを作る -
りんな風 女子高生Bot - docomo雑談対話API +α を使って 自分専用Botを作る -Koji Shiraishi
 
リクルート式 自然言語処理技術の適応事例紹介
リクルート式 自然言語処理技術の適応事例紹介リクルート式 自然言語処理技術の適応事例紹介
リクルート式 自然言語処理技術の適応事例紹介Recruit Technologies
 

Destaque (12)

Amazon lexを触ってみた
Amazon lexを触ってみたAmazon lexを触ってみた
Amazon lexを触ってみた
 
デバイス WebAPIによるスマートフォン周辺デバイスの活用
デバイス WebAPIによるスマートフォン周辺デバイスの活用デバイス WebAPIによるスマートフォン周辺デバイスの活用
デバイス WebAPIによるスマートフォン周辺デバイスの活用
 
GotAPIの概要と技術解説
GotAPIの概要と技術解説GotAPIの概要と技術解説
GotAPIの概要と技術解説
 
デバイスコネクトWebAPIの開発状況について
デバイスコネクトWebAPIの開発状況についてデバイスコネクトWebAPIの開発状況について
デバイスコネクトWebAPIの開発状況について
 
NHK Linked Data API 〜つながる番組データを目指して〜
NHK Linked Data API 〜つながる番組データを目指して〜NHK Linked Data API 〜つながる番組データを目指して〜
NHK Linked Data API 〜つながる番組データを目指して〜
 
ドコモオープンイノベーションの取り組みと提供APIのIoT展開について
ドコモオープンイノベーションの取り組みと提供APIのIoT展開についてドコモオープンイノベーションの取り組みと提供APIのIoT展開について
ドコモオープンイノベーションの取り組みと提供APIのIoT展開について
 
Docomo Cloud Package
Docomo Cloud PackageDocomo Cloud Package
Docomo Cloud Package
 
Amazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTips
Amazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTipsAmazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTips
Amazon Elastic MapReduceやSparkを中心とした社内の分析環境事例とTips
 
WatsonQA応用編~BluemixとWatson Engagement Advisor(WEA)連携~
WatsonQA応用編~BluemixとWatson Engagement Advisor(WEA)連携~ WatsonQA応用編~BluemixとWatson Engagement Advisor(WEA)連携~
WatsonQA応用編~BluemixとWatson Engagement Advisor(WEA)連携~
 
IBM Bluemix × Watson でMashup Hackathon (API説明)
IBM Bluemix × Watson でMashup Hackathon (API説明)IBM Bluemix × Watson でMashup Hackathon (API説明)
IBM Bluemix × Watson でMashup Hackathon (API説明)
 
りんな風 女子高生Bot - docomo雑談対話API +α を使って 自分専用Botを作る -
りんな風 女子高生Bot - docomo雑談対話API +α を使って 自分専用Botを作る -りんな風 女子高生Bot - docomo雑談対話API +α を使って 自分専用Botを作る -
りんな風 女子高生Bot - docomo雑談対話API +α を使って 自分専用Botを作る -
 
リクルート式 自然言語処理技術の適応事例紹介
リクルート式 自然言語処理技術の適応事例紹介リクルート式 自然言語処理技術の適応事例紹介
リクルート式 自然言語処理技術の適応事例紹介
 

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

たかがAPI,されどAPI、シナジーで広がるビジネスチャンス
たかがAPI,されどAPI、シナジーで広がるビジネスチャンスたかがAPI,されどAPI、シナジーで広がるビジネスチャンス
たかがAPI,されどAPI、シナジーで広がるビジネスチャンスOsaka University
 
Phone gap+javascriptスマホアプリ開発(入門編)
Phone gap+javascriptスマホアプリ開発(入門編)Phone gap+javascriptスマホアプリ開発(入門編)
Phone gap+javascriptスマホアプリ開発(入門編)Monaca
 
能力ファイル 2Tソフトウエアソリューション株式会社
能力ファイル 2Tソフトウエアソリューション株式会社能力ファイル 2Tソフトウエアソリューション株式会社
能力ファイル 2Tソフトウエアソリューション株式会社Brrs Nguyen(2TS)
 
【B-1】スマートデバイスとクラウドが実現するソフトウェアの革新~上陸した Windows Phone7 と Kinect による AR世界の実現~ 西脇資哲氏
【B-1】スマートデバイスとクラウドが実現するソフトウェアの革新~上陸した Windows Phone7 と Kinect による AR世界の実現~ 西脇資哲氏【B-1】スマートデバイスとクラウドが実現するソフトウェアの革新~上陸した Windows Phone7 と Kinect による AR世界の実現~ 西脇資哲氏
【B-1】スマートデバイスとクラウドが実現するソフトウェアの革新~上陸した Windows Phone7 と Kinect による AR世界の実現~ 西脇資哲氏Developers Summit
 
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッションC# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッションYoshito Tabuchi
 
IoT in Smartphone Economy
IoT in Smartphone EconomyIoT in Smartphone Economy
IoT in Smartphone EconomyKyosuke Kawate
 
Wireless Japan[講演]八子 20110526
Wireless Japan[講演]八子 20110526Wireless Japan[講演]八子 20110526
Wireless Japan[講演]八子 20110526知礼 八子
 
Flexでサクッと作れ!Androidアプリ開発のススメ
Flexでサクッと作れ!Androidアプリ開発のススメFlexでサクッと作れ!Androidアプリ開発のススメ
Flexでサクッと作れ!Androidアプリ開発のススメKeisuke Todoroki
 
IoT 導入を簡単に実現する“つなぐ”技術 ​~デンソーウェーブの IoT製品と Microsoft Azure 連携~
IoT 導入を簡単に実現する“つなぐ”技術 ​~デンソーウェーブの IoT製品と Microsoft Azure 連携~IoT 導入を簡単に実現する“つなぐ”技術 ​~デンソーウェーブの IoT製品と Microsoft Azure 連携~
IoT 導入を簡単に実現する“つなぐ”技術 ​~デンソーウェーブの IoT製品と Microsoft Azure 連携~IoTビジネス共創ラボ
 
タブレットセミナ[八子] R 20110217
タブレットセミナ[八子] R 20110217タブレットセミナ[八子] R 20110217
タブレットセミナ[八子] R 20110217知礼 八子
 
Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.Yuki Higuchi
 
ニフティクラウド
 mobile backend とIoTの良い関係
ニフティクラウド
 mobile backend とIoTの良い関係ニフティクラウド
 mobile backend とIoTの良い関係
ニフティクラウド
 mobile backend とIoTの良い関係ニフクラ mobile backend
 
アンドロイド勉強会第二回 080525 3
アンドロイド勉強会第二回  080525 3アンドロイド勉強会第二回  080525 3
アンドロイド勉強会第二回 080525 3shimay
 
デバイス WebAPI(GotAPI)とその活用事例のご紹介 - ワイヤレスジャパン2016
デバイス WebAPI(GotAPI)とその活用事例のご紹介 - ワイヤレスジャパン2016デバイス WebAPI(GotAPI)とその活用事例のご紹介 - ワイヤレスジャパン2016
デバイス WebAPI(GotAPI)とその活用事例のご紹介 - ワイヤレスジャパン2016Device WebAPI Consortium
 
WWCT ラズパイ Bluemix 講習資料
WWCT ラズパイ Bluemix 講習資料WWCT ラズパイ Bluemix 講習資料
WWCT ラズパイ Bluemix 講習資料Masaya Fujita
 
Firefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own PathFirefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own Pathdynamis
 
みなさんがHtml5をやらなくていい3つの理由
みなさんがHtml5をやらなくていい3つの理由みなさんがHtml5をやらなくていい3つの理由
みなさんがHtml5をやらなくていい3つの理由Masakazu Muraoka
 
ひと漕ぎで二度おいしい!? Flutterを使ったモバイルアプリ開発への期待と実態と付き合い方(NTTデータ テクノロジーカンファレンス 2020 発表資料)
ひと漕ぎで二度おいしい!? Flutterを使ったモバイルアプリ開発への期待と実態と付き合い方(NTTデータ テクノロジーカンファレンス 2020 発表資料)ひと漕ぎで二度おいしい!? Flutterを使ったモバイルアプリ開発への期待と実態と付き合い方(NTTデータ テクノロジーカンファレンス 2020 発表資料)
ひと漕ぎで二度おいしい!? Flutterを使ったモバイルアプリ開発への期待と実態と付き合い方(NTTデータ テクノロジーカンファレンス 2020 発表資料)NTT DATA Technology & Innovation
 
Windows azure mobile services を使った windows ストアアプリ開発 1027
Windows azure mobile services を使った windows ストアアプリ開発 1027Windows azure mobile services を使った windows ストアアプリ開発 1027
Windows azure mobile services を使った windows ストアアプリ開発 1027Shotaro Suzuki
 

Semelhante a VDC 5th - NTTドコモ ハンズオン資料 (20)

たかがAPI,されどAPI、シナジーで広がるビジネスチャンス
たかがAPI,されどAPI、シナジーで広がるビジネスチャンスたかがAPI,されどAPI、シナジーで広がるビジネスチャンス
たかがAPI,されどAPI、シナジーで広がるビジネスチャンス
 
Phone gap+javascriptスマホアプリ開発(入門編)
Phone gap+javascriptスマホアプリ開発(入門編)Phone gap+javascriptスマホアプリ開発(入門編)
Phone gap+javascriptスマホアプリ開発(入門編)
 
能力ファイル 2Tソフトウエアソリューション株式会社
能力ファイル 2Tソフトウエアソリューション株式会社能力ファイル 2Tソフトウエアソリューション株式会社
能力ファイル 2Tソフトウエアソリューション株式会社
 
【B-1】スマートデバイスとクラウドが実現するソフトウェアの革新~上陸した Windows Phone7 と Kinect による AR世界の実現~ 西脇資哲氏
【B-1】スマートデバイスとクラウドが実現するソフトウェアの革新~上陸した Windows Phone7 と Kinect による AR世界の実現~ 西脇資哲氏【B-1】スマートデバイスとクラウドが実現するソフトウェアの革新~上陸した Windows Phone7 と Kinect による AR世界の実現~ 西脇資哲氏
【B-1】スマートデバイスとクラウドが実現するソフトウェアの革新~上陸した Windows Phone7 と Kinect による AR世界の実現~ 西脇資哲氏
 
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッションC# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
C# を使い倒す!クロス プラットフォーム アプリ開発とクラウド連携の新潮流 - Xamarin セッション
 
IoT in Smartphone Economy
IoT in Smartphone EconomyIoT in Smartphone Economy
IoT in Smartphone Economy
 
Wireless Japan[講演]八子 20110526
Wireless Japan[講演]八子 20110526Wireless Japan[講演]八子 20110526
Wireless Japan[講演]八子 20110526
 
Flexでサクッと作れ!Androidアプリ開発のススメ
Flexでサクッと作れ!Androidアプリ開発のススメFlexでサクッと作れ!Androidアプリ開発のススメ
Flexでサクッと作れ!Androidアプリ開発のススメ
 
IoT 導入を簡単に実現する“つなぐ”技術 ​~デンソーウェーブの IoT製品と Microsoft Azure 連携~
IoT 導入を簡単に実現する“つなぐ”技術 ​~デンソーウェーブの IoT製品と Microsoft Azure 連携~IoT 導入を簡単に実現する“つなぐ”技術 ​~デンソーウェーブの IoT製品と Microsoft Azure 連携~
IoT 導入を簡単に実現する“つなぐ”技術 ​~デンソーウェーブの IoT製品と Microsoft Azure 連携~
 
タブレットセミナ[八子] R 20110217
タブレットセミナ[八子] R 20110217タブレットセミナ[八子] R 20110217
タブレットセミナ[八子] R 20110217
 
Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.
 
ニフティクラウド
 mobile backend とIoTの良い関係
ニフティクラウド
 mobile backend とIoTの良い関係ニフティクラウド
 mobile backend とIoTの良い関係
ニフティクラウド
 mobile backend とIoTの良い関係
 
アンドロイド勉強会第二回 080525 3
アンドロイド勉強会第二回  080525 3アンドロイド勉強会第二回  080525 3
アンドロイド勉強会第二回 080525 3
 
デバイス WebAPI(GotAPI)とその活用事例のご紹介 - ワイヤレスジャパン2016
デバイス WebAPI(GotAPI)とその活用事例のご紹介 - ワイヤレスジャパン2016デバイス WebAPI(GotAPI)とその活用事例のご紹介 - ワイヤレスジャパン2016
デバイス WebAPI(GotAPI)とその活用事例のご紹介 - ワイヤレスジャパン2016
 
デバイス WebAPI設計の進め方
デバイス WebAPI設計の進め方デバイス WebAPI設計の進め方
デバイス WebAPI設計の進め方
 
WWCT ラズパイ Bluemix 講習資料
WWCT ラズパイ Bluemix 講習資料WWCT ラズパイ Bluemix 講習資料
WWCT ラズパイ Bluemix 講習資料
 
Firefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own PathFirefox OS - Blaze Your Own Path
Firefox OS - Blaze Your Own Path
 
みなさんがHtml5をやらなくていい3つの理由
みなさんがHtml5をやらなくていい3つの理由みなさんがHtml5をやらなくていい3つの理由
みなさんがHtml5をやらなくていい3つの理由
 
ひと漕ぎで二度おいしい!? Flutterを使ったモバイルアプリ開発への期待と実態と付き合い方(NTTデータ テクノロジーカンファレンス 2020 発表資料)
ひと漕ぎで二度おいしい!? Flutterを使ったモバイルアプリ開発への期待と実態と付き合い方(NTTデータ テクノロジーカンファレンス 2020 発表資料)ひと漕ぎで二度おいしい!? Flutterを使ったモバイルアプリ開発への期待と実態と付き合い方(NTTデータ テクノロジーカンファレンス 2020 発表資料)
ひと漕ぎで二度おいしい!? Flutterを使ったモバイルアプリ開発への期待と実態と付き合い方(NTTデータ テクノロジーカンファレンス 2020 発表資料)
 
Windows azure mobile services を使った windows ストアアプリ開発 1027
Windows azure mobile services を使った windows ストアアプリ開発 1027Windows azure mobile services を使った windows ストアアプリ開発 1027
Windows azure mobile services を使った windows ストアアプリ開発 1027
 

Último

2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料Tokyo Institute of Technology
 
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラムKochi Eng Camp
 
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~Kochi Eng Camp
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料Takayuki Itoh
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024koheioishi1
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2Tokyo Institute of Technology
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationYukiTerazawa
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ssusere0a682
 

Último (8)

2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
 
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
 
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 

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

  • 1. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 1 デバイスコネクトWebAPIによる M100向けWeb開発の実現 【ハンズオン①】
  • 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. 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. 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. 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. 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. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 7 ・スマートフォンをハブにして腕時計型の心拍数計の情報をM100に表示 ・同時にPCからM100のカメラ映像を遠隔モニタリング このようなデモがWeb開発の知識のみでつくれます! 1.5 MWC2015でのVuzix社デモ
  • 8. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 8 1.6 今後の予定 ・デバイスコネクトWebAPI相当のアプリをVuzix社の M100用マーケットでも近日中に公開予定 ⇒Androidの開発環境を意識しなくてもアプリの インストールのみでWeb開発が可能に
  • 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. 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. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 11 2.2 M100のIPアドレスの確認 1.M100の無線LAN接続を確認(PCと同一ネットワークにしておく) 2.M100のIPアドレスの確認 M100作業
  • 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. 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. 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. 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. 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. 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. 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. 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. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved ドコモデベロッパーサポートの APIによる認識機能の利用 20 【ハンズオン②】
  • 21. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 2.まず最初に「ログイン/新規登録」から画面の指示に従ってアカウントを登録 1.Webブラウザからドコモデベロッパーサポートにアクセス 1.1 利用準備:アカウント登録 21 ドコモデベロッパーサポートURL: https://dev.smt.docomo.ne.jp/
  • 22. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved アカウントを登録し、ログインすると、マイページにアクセスできるようになる 1.2 利用準備:ログイン 22
  • 23. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 1.マイページから 「新規アプリケーション申請へ」を選択 2.「アプリケーション登録」の各情報を入力 ⇒「API機能選択へ」ボタン ⇒各APIの【利用するAPI機能】を選択 ⇒「利用申請する」ボタン 3.完了画面まで入力が終わると 【開発用APIキー】が発行される 申請情報入力画面 1.3 利用準備:API申請 23
  • 24. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved マイページの「アプリ/APIの申請・管理」から API Keyの確認を確認する アプリケーション名のリンク から登録情報や利用APIの 変更が行える API Key情報 (他に知られないように すること) 1.4 API Key情報の確認 24
  • 25. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 一部のREST API形式のものは、APIコンソールから動作が確認できます 2.1 APIコンソールからの動作確認 25
  • 26. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved HTTPリクエストボディのテ キストを書き換えて実行 26 2.2 APIコンソールからの動作確認:雑談対話API
  • 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. 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. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 1.Android Studioのスタート画面から「Import Non-Android Studio project」を選択し、 2.先ほどのサンプルプロジェクトのフォルダを選択 3.ダイアログ確認・指示に従ってプロジェクトを開く(基本的に変更不要) 3.2 Android Studio用サンプルプロジェクトの準備 29
  • 30. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 開いた後にエラーとなった場合 30
  • 31. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 31 開いた後にエラーとなった場合
  • 32. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved APIキーを登録情報のものに変更してからRun ‘app’でビルド・実行 3.3 Android Studioでのサンプルプロジェクトのビルド 32
  • 33. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved Start recognitionボタンを押すことで音声認識が試せます(要ネットワーク接続) 3.4 M100での動作画面 33
  • 34. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 34 音声合成APIのページからサンプルコード(文字並べ替え)をダウンロード (ZIPファイル内のNarabete_HiraganaフォルダがAndroidのプロジェクト) 3.5 音声合成のサンプルの利用
  • 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. 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. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 37 1.“TextSpeaker.java“のAPIキーを登録情報のものに変更 2.Run ‘app’でビルド・実行 3.8 Android Studioでのサンプルプロジェクトのビルド
  • 38. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 38 さきほどの音声認識サンプルに 音声合成機能を組み込む 【おまけ】
  • 39. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 39 【音声合成】のサンプルから、【音声認識】のサンプルに 必要なライブラリ(jarファイル)をコピー
  • 40. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 40 【音声認識】のサンプルのBuild.gradle(Module: app)に以下のように追記
  • 41. Copyright© 2015 NTT DOCOMO, Inc. All rights reserved 41 【音声合成】のサンプルから、【音声認識】のサンプルに “TextSperker.java”をコピー
  • 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. 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. 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. 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. 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’でビルド・実行