アプリ開発日誌
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にも組み込んでみます。
次の記事→