アプリ開発日誌
2016.06.24
Android 開発してみよう!「OK, Google」を利用した音声認識
こんにちは。開発のT.Jyoです。
前回の記事でiOSでもついにSiriKit(Intents / IntentsUI)を使って、「Hey, Siri」をハンドリングできるようになりました。
現在、SiriKitを使ってDEMO作成中です。近日公開しますので興味ある方は是非見てください。
さて、「Hey, Siri」をハンドリングできるようになったのは分かったのですが、Androidの「OK, Google」はどうなの?
実は、ハンドリングできちゃうんです!
今回は「OK, Google」の音声認識実装について記載します。
Custom Voice Actions
「OK, Google」で発話した内容を使って発話した内容をアプリ側で使えるはず、、、
しかし、現在はまだ実装されておらず使用できません。
・Custom Voice Actions(公式)
https://developers.google.com/voice-actions/custom-actions?hl=ja
AccessibilityService(ユーザー補助)
こちらを使って今回「OK, Google」をハンドリングします。
まず初めに、こちらは音声認識用の機能では無いためユーザーに端末設定をさせる動作が必要となります。(設定方法は後述)
1.src/AccessibillityVoiceService.java
AccessibilityService を継承した Service クラスの作成。
public class AccessibillityVoiceService extends AccessibilityService { @Override public void onAccessibilityEvent(AccessibilityEvent event) { AccessibilityNodeInfo accessibilityNodeInfo = event.getSource(); if (null == accessibilityNodeInfo) return; String className = accessibilityNodeInfo.getClassName().toString(); //!< 音声認識の判断クラス final CharSequence text = accessibilityNodeInfo.getText(); //!< 音声認識に登録されたテキスト if(-1 == className.indexOf("com.google.android.apps.gsa.searchplate") || null == text) return; Toast.makeText(getApplicationContext(), text.toString(), Toast.LENGTH_SHORT).show(); } @Override public void onInterrupt() { } }
2.res/xml/accessibillity_service_config.xml
Accessibilityの設定ファイルを作成。
<?xml version="1.0" encoding="UTF-8" ?> <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:accessibilityEventTypes="typeAllMask" android:accessibilityFeedbackType="feedbackSpoken" android:accessibilityFlags="flagDefault" android:canRetrieveWindowContent="true" android:description="@string/accessibillity_description" <!-- ユーザー補助機能許可の説明 --> />
3. AndroidManifest.xml
Accessibilityのサービスを定義。
<uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE" /> <!-- applicationタグ外に記載 --> <!-- applicationタグ内に記載 --> <service android:name=".AccessibillityVoiceService" android:label="AccessibillityVoiceService" android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"> <intent-filter> <action android:name="android.accessibilityservice.AccessibilityService" /> </intent-filter> <meta-data android:name="android.accessibilityservice" android:resource="@xml/accessibillity_service_config" /> </service>
開発は以上。
あとは、ユーザー側(端末)の設定。
①まずはアプリの起動
②端末の「設定>ユーザー補助>AccessibilityVoiceService」
③OFFのスイッチをONにする
あとは、「OK, Google」=>発話した内容がトーストで表示されました!
実装内容が分かってしまえば、思ったよりも簡単に組み込みができます。
是非、取り込んでみてください。
次回はこれと同じ機能をiOSにも組み込んでみます。
次の記事→