3

このアイデアは、ボタンを押すだけでユーザーの音声入力を取得し、それをアプリ内の検索に渡すことです。デバイスの制限により、便利な SearchView の代わりにSearchViewCompatを使用しています。このリンクを使用して音声出力を取得できましたが、この方法でテキストを検索バーに渡す簡単な方法はありません。
検索ビュー自体はビューとして表示されますが(setText()はありません)、検索バーが表示されたらすぐに「キーボードでマイクキーを使用してください」などと言うことができれば、うまくいくと思います。どんな助けでも大歓迎です。
ありがとう、SGB。

4

2 に答える 2

3

いいえ、できません。少なくとも、ソフト キーボードの音声入力ボタンを使用したり手動でクリックしたりせずに音声入力を開始する簡単な方法はありません。RecognitionListener

私の知る限り、この投稿では、実際にこのライブラリを使用する IME に音声を統合する方法について説明しています: google-voice-typing-integration。ちょっと刺激になるかも。

于 2013-02-14T01:47:52.970 に答える
1

自分の質問に答えて申し訳ありませんが、ここにありました:質問のリンクから「音声入力から文字列配列を取得する」全体を削除し、で検索を開始する代わりに、onSearchRequested()これを行いました:

startSearch(grabString, false, null, false);


public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(aViaBuildConfig.MIC_KEY) {
        DebugLog.e(TAG , "onDown event : " + event);
        DebugLog.e(TAG , "onDown keyCode: " + keyCode);
        if(keyCode == Constants.MIC_KEY) {
            onSearchRequested();
            Intent voiceIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
            voiceIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
            try {
                startActivityForResult(voiceIntent, Constants.RESULT_SPEECH);
            } catch (ActivityNotFoundException ex) {
                DebugLog.e(TAG, "Not found excpetion onKeyDown: " + ex);
            }
        }
        return super.onKeyDown(keyCode, event);
    }
    return false; 
}


protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
        case Constants.RESULT_SPEECH:
            super.onActivityResult(requestCode, resultCode, data);
            if (resultCode == RESULT_OK && null != data) {
                 ArrayList<String> spokenSearch = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
                 DebugLog.e("Glenn: " , "Speech = " + spokenSearch);
                 String grabString = spokenSearch.get(0);
                 startSearch(grabString, false, null, false);
            }
            break;
    }
}
于 2013-02-15T21:17:45.023 に答える