将Android语音识别添加到现有应用程序

时间:2015-03-04 21:15:32

标签: android background speech-recognition

我有一个有用的应用程序,我想添加语音命令。当前应用程序在周期性(定时器)的基础上通过蓝牙来回传输数据。用户可以按Buttons和NumberPickers来修改通过蓝牙发送的数据。还有从蓝牙链接接收的数据,并显示在textViews中。此应用程序目前正常运行。

我想要做的是添加语音命令功能,以便用户可以选择按下Buttons / NumberPickers,或者只使用语音命令更改值。

我测试了一些可以在各种网站上找到的语音到文本示例。我已经成功测试了一个使用RecognizerIntent的应用程序。按下按钮后,会弹出一个对话框,您可以说出单词或短语,并在屏幕上正确显示结果。

所以,我认为我很接近,但我不确定如何将Speech-to-Text与我当前的蓝牙应用程序结合起来。我不希望用户必须按下按钮,我只是希望应用程序不断收听。另外,我不想在屏幕上弹出语音对话框。

我的硬件是运行Android 4.1的三星平板电脑。

我对Android编程比较陌生,所以任何建议(无论多么基本)都表示赞赏。感谢。

1 个答案:

答案 0 :(得分:1)

要阻止屏幕上弹出语音对话框,您可以使用ACTION_RECOGNIZE_SPEECH意图:

private static int SR_CODE = 123;


/**
     * Initializes the speech recognizer and starts listening to the user input
     */
    private void listen()  {
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        //Specify language
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.ENGLISH)
        // Specify language model
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        // Specify how many results to receive
        intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 5);
        // Start listening
        startActivityForResult(intent, SR_CODE);
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == SR_CODE && resultCode == RESULT_OK)  {
                if(data!=null) {
                //Retrieves the best list SR result
                ArrayList<String> nBestList = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
               String bestResult = nBestList.get(0);
               Toast.makeText(getApplicationContext(), bestResult, Toast.LENGTH_LONG).show;              
            }else {         
                //Reports error in recognition error in log
                Log.e(LOGTAG, "Recognition was not successful");
            }

    }

关于另一个问题,&#34;我不希望用户必须按下按钮,我只是希望应用程序能够不断收听&#34;:

我建议使用CMUSphinx来持续识别语音。要使用谷歌语音识别API实现连续语音识别,您可能不得不求助于后台服务中的循环,这将占用太多资源并耗尽设备电池。

另一方面,Pocketsphinx的效果非常好。它足够快,可以发现关键短语并识别锁定屏幕后面的语音命令,而无需用户触摸他们的设备。它完成所有这些离线操作。  您可以尝试demo

如果你真的想使用google的API,我已经在上面演示了see this