【问题标题】:Is there a way to launch voice input on the softkeyboard programatically?有没有办法以编程方式在软键盘上启动语音输入?
【发布时间】:2013-02-13 22:36:27
【问题描述】:

这个想法是在按下按钮时获取用户语音输入,并将其传递给应用内的搜索。由于设备限制,我们使用SearchViewCompat 而不是有用的 SearchView。我已经能够使用this link 获取语音输出,但是没有一种简单的方法可以通过这种方式将文本传递到搜索栏。
搜索视图本身显示为一个视图(因此没有 setText()),但如果我可以在搜索栏出现时说“使用键盘上的麦克风键”或其他内容,我认为它可能会起作用。任何帮助将不胜感激。
谢谢, 国标。

【问题讨论】:

    标签: android android-widget android-keypad


    【解决方案1】:

    不,这是不可能的。至少,在不使用RecognitionListener 或手动点击软键盘上的语音输入按钮的情况下,没有简单的方式来启动语音输入。

    据我所知,this post 解释了如何将语音集成到实际使用此库的 IME 中:google-voice-typing-integration。它可能会启发你一点。

    【讨论】:

    • 嗯,这不是我真正想要的,但这里有一些很棒的信息。我可以将 RecognitionListener 用于第二个或第三个选项。
    • 您可以创建一个包含按钮来触发语音输入的视图。然后在适当的时候调用它,比如EditText.OnClickListener。看看这个问题:stackoverflow.com/questions/1896939/…
    【解决方案2】:

    很抱歉回答了我自己的问题,但这里是: 我从问题中的链接中删除了整个“从语音输入中获取字符串数组”,然后,我没有使用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;
        }
    }
    

    【讨论】:

    • 抱歉缺少cmets:第1部分只是抓取keyDown并以android方式启动“get coive stuff”活动,第二部分是获取答案并将其传递给搜索。关键位是 startSearch(grabString, false, null, false);
    猜你喜欢
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多