web-dev-qa-db-ja.com

Android OK Googleと統合されたアプリ

次のような音声コマンドを発行する方法はありますか?

OK GOOGLE ASK XXXいくつかのアプリ固有の質問またはコマンド

そして、認識されたテキストで「APP」を起動します:「いくつかのアプリ固有の質問またはコマンド」

私のアプリには音声認識サービスがあります...しかし、アプリを使用しているときに、OK Googleが処理できる質問をすることはできません...

22
r.t.s.

Voice Actions API を介して、アプリは system actions に登録でき、そのうちの1つは「search」です(したがって、「APPで質問またはコマンドを検索する」ことができます) )。

これまで、一部の開発者は カスタム音声アクションリクエストを送信 を実行できました。承認されると、ユーザーは音声でアプリで特定のアクションを実行できます。これはもはやオプションではありません。

18
ianhanniballake

これは実際には非常に簡単です。組み込みのvoice Actions APIを使用すると、オンラインモードとオフラインモードの両方で実行できます。ここであなたのための短いデモ、

最初にユーザーに音声の入力を促す、

    private void promptSpeechInput() {
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
        intent.putExtra(RecognizerIntent.EXTRA_Prompt,
                getString(R.string.speech_Prompt));
        try {
            startActivityForResult(intent, REQ_CODE_SPEECH_INPUT);
        } catch (ActivityNotFoundException a) {
            Toast.makeText(getApplicationContext(),
                    getString(R.string.speech_not_supported),
                    Toast.LENGTH_SHORT).show();
        }
    }

これにより、組み込みのGoogle音声入力画面が表示され、音声入力が取得されます。音声入力後、結果を確認し、変換された文字列に音声を取得し、

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch (requestCode) {
        case REQ_CODE_SPEECH_INPUT: {
            if (resultCode == RESULT_OK && null != data) {

                ArrayList<String> result = data
                        .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
                // here the string converted from your voice
            String converted_text = (result.get(0);
            }
            break;
        }

        }
    }

これで、任意の方法で文字列を操作したり、定義済みのアクション文字列と比較して特定のアクションなどを実行できます。

更新:

特定のコマンドを言った後にアプリを動作させるには"OK Google""OK Google"という静的文字列を定義し、各音声入力をこの事前定義された文字列と比較します。 "OK Google" Stringに一致する場合は、次の世界に移動して指示を実行します。例えば、

「OK Google、現在の時間を話す」

ここで、最初の2つの単語を比較できます"OK Google"事前定義された文字列と一致する場合、次の単語"speak the current time"に移動します。このため、"speak the current time"のようなコマンドを含む配列のセットを保存して、時間を読み上げます。

よりインテリジェントに見せるために、バックグラウンドサービスを実装し、ユーザーの音声入力を聞き続けることができます。

PS:それが効率的な方法かどうかはわかりませんが、これは別のアプローチです。

10
Prokash Sarkar

「OK Google」をアプリに統合するには、次の2つの手順を実行するだけです。

まず、マニフェストファイルで宣言する必要があります

<activity..
 <intent-filter>
                <action Android:name="com.google.Android.gms.actions.SEARCH_ACTION" />
                <category Android:name="Android.intent.category.DEFAULT" />
            </intent-filter>
/>

次に、アクティビティonCreateで宣言する必要があります

 if (getIntent().getAction() != null && getIntent().getAction().equals("com.google.Android.gms.actions.SEARCH_ACTION")) {
            query = getIntent().getStringExtra(SearchManager.QUERY);
            Log.e("Query:",query);   //query is the search Word              
        }

ユーザーは「OK google」で検出する構文に従う必要があります。ユーザーが「OK Google、phrase on app name」と言うと、Googleは最初に存在するかどうかを確認しますこのようなクエリを処理できると宣言された、インストールされたアプリ名というアプリ。

5
Phani varma