Android 開発してみよう!「OK, Google」を利用した音声認識

by

oksiri1

こんにちは。開発の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にする

Screenshot_2016-06-23-18-56-25   Screenshot_2016-06-23-18-56-31  Screenshot_2016-06-23-19-20-20

 

あとは、「OK, Google」=>発話した内容がトーストで表示されました!

Screenshot_2016-06-23-18-59-25

実装内容が分かってしまえば、思ったよりも簡単に組み込みができます。

是非、取り込んでみてください。

 

次回はこれと同じ機能をiOSにも組み込んでみます。

次の記事

T.Jyo
元々、有名ゲーム開発会社でプログラマとして所属。
EDAへ転職後はiOS/Android/サーバーの開発者として活躍。
プログラマ歴10年以上

Egg Device Application

東京品川のスマホアプリ開発会社です。
一般アプリ、業務用アプリからVRまで開発可能。

ライター一覧

求人情報

スマホアプリ開発の
相談を受け付けています

メールでのご相談

お電話でのご相談
TEL 03-5422-7524
平日10:00~18:00