23

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

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

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

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

4

3 に答える 3

18

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

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

于 2015-06-07T03:39:20.957 に答える
10

これは実際には非常に単純です。組み込みの音声アクション 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」文字列と一致する場合は、次の世界に移動して指示を実行します。例えば、

「OK Google で現在の時刻を話して」

ここで、最初の 2 つの単語"OK Google"を比較して、それが定義済みの文字列に一致する場合は、次の単語である"speak the current time"に移動します。このために、「現在の時刻を話す」などのコマンドを含む一連の配列を保存して、時刻を話すことができます。

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

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

于 2015-06-07T04:22:22.793 に答える
5

「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>
/>

ここで、Activity 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、アプリ名でフレーズを検索してください」と言うと、Google は最初にアプリ名というアプリがインストールされているかどうかを確認します。そのようなクエリを処理します。

于 2016-11-08T10:04:24.067 に答える