Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 语音识别器什么都不做…我错过了什么_Java_Android_Speech Recognition - Fatal编程技术网

Java 语音识别器什么都不做…我错过了什么

Java 语音识别器什么都不做…我错过了什么,java,android,speech-recognition,Java,Android,Speech Recognition,请参阅下面的代码。OnBeginingOfspeech()会被调用(顺便说一句,甚至在我开始说话之前),但之后-什么都没有。我错过了什么 我承认代码主要由不同的示例组成,我并不完全理解这些示例。但我希望它至少能做点什么,这样我就可以继续实验了。感谢您的帮助 public class SpeechRecogActivity extends Activity { private SpeechRecognizer recog; @Override protected void onC

请参阅下面的代码。OnBeginingOfspeech()会被调用(顺便说一句,甚至在我开始说话之前),但之后-什么都没有。我错过了什么

我承认代码主要由不同的示例组成,我并不完全理解这些示例。但我希望它至少能做点什么,这样我就可以继续实验了。感谢您的帮助

public class SpeechRecogActivity extends Activity {
private SpeechRecognizer recog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.e("TTS_SpeechRecog", "Starting...");
        recog = SpeechRecognizer.createSpeechRecognizer(this);
        recog.setRecognitionListener(new RecogListener());
        Intent intent = RecognizerIntent.getVoiceDetailsIntent(getApplicationContext());
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "cmn-Hans-CN");
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "cmn-Hans-CN");
        intent.putExtra(RecognizerIntent.EXTRA_ONLY_RETURN_LANGUAGE_PREFERENCE, "cmn-Hans-CN");
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "com.dummy");
        intent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true);
        recog.startListening(intent);
    }

    private static class RecogListener implements RecognitionListener {
        @Override
        public void onBeginningOfSpeech() {
            Log.e("TTS_SpeechRecog", "onBeginningOfSpeech...");
        }

        @Override
        public void onRmsChanged(float rmsdB) {
            Log.e("TTS_SpeechRecog", "onRmsChanged...");
        }

        @Override
        public void onEndOfSpeech() {
            Log.e("TTS_SpeechRecog", "onEndOfSpeech...");
        }

        @Override
        public void onReadyForSpeech(Bundle params) {
            Log.e("TTS_SpeechRecog", "onReadyForSpeech...");
        }

        @Override
        public void onResults(Bundle data) {
            Log.e("TTS_SpeechRecog", "onResults...");
            ArrayList strlist = data.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
            for (int i = 0; i < strlist.size();i++ ) {
                Log.d("Speech", "result=" + strlist.get(i));
            }
        }

        @Override
        public void onPartialResults(Bundle partialResults) {
            Log.e("TTS_SpeechRecog", "onPartialResults...");
        }

        @Override
        public void onEvent(int eventType, Bundle params) {
            Log.e("TTS_SpeechRecog", "onEvent...");
        }

        @Override
        public void onBufferReceived(byte[] buffer) {
            Log.e("TTS_SpeechRecog", "onBufferReceived...");
        }

        @Override
        public void onError(int error) {
            Log.e("TTS_SpeechRecog", "onBeginningOfSpeech...");
        }
    }
}
公共类SpeechRecogActivity扩展活动{
私人语音识别记录;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Log.e(“TTS_SpeechRecog”,“开始…”);
recog=SpeechRecognizer.createSpeechRecognizer(此);
recog.setRecognitionListener(新的RecogListener());
Intent Intent=RecognizerIntent.getVoiceDetailsInt(getApplicationContext());
intent.putExtra(RecognizerIntent.EXTRA_语言,cmn Hans CN);
intent.putExtra(RecognizerIntent.EXTRA_语言偏好,“cmn Hans CN”);
intent.putExtra(识别器intent.EXTRA仅返回语言首选项,“cmn Hans CN”);
intent.putExtra(RecognizerIntent.EXTRA语言模型,RecognizerIntent.LANGUAGE模型自由形式);
intent.putExtra(RecognizerIntent.EXTRA_调用_包,“com.dummy”);
intent.putExtra(RecognizerIntent.EXTRA_部分_结果,true);
记录(意图);
}
私有静态类RecogListener实现了RecognitionListener{
@凌驾
开始时的公共无效fSpeech(){
Log.e(“TTS_SpeechRecog”,“onbeginingofspeech…”);
}
@凌驾
在RMSCHANGED上的公共无效(浮动rmsdB){
Log.e(“TTS_SpeechRecog”,“onRmsChanged…”);
}
@凌驾
公共无效onEndOfSpeech(){
Log.e(“TTS_SpeechRecog”,“onEndOfSpeech…”);
}
@凌驾
ReadyForSpeech上的公共void(Bundle参数){
Log.e(“TTS_SpeechRecog”,“onReadyForSpeech…”);
}
@凌驾
公共结果(捆绑数据){
Log.e(“TTS_SpeechRecog”,“onResults…”);
ArrayList strlist=data.getStringArrayList(SpeechRecognitor.RESULTS\u RECOGNITION);
对于(int i=0;i
您必须在单击任何按钮或小部件后启动SpeechRecognizer

我建议您使用下面的github存储库

同时确保您在menifest中添加了权限,如:

  <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />

可能您忘记添加权限了

android.permission.RECORD\u AUDIO

在API 23之前,您只需添加:


API 23使用运行时权限后。

Hmm…实际上,这正是正在发生的事情-用户单击按钮(在不同的活动中),然后调用此活动。。。这还不够吗?是的,当你点击一个按钮时它会呼叫。这是默认行为。正如我刚才所说的…一个按钮被点击。但它不起作用。你是说它听不出你的声音吗?还要确保你的互联网正在上网,并添加“确实做到了!”!然而,非常奇怪的是,带有“RecognizerIntent.ACTION\u RECOGNIZE\u SPEECH”的“startActivityForResult()”在没有此类权限的情况下确实可以工作!知道为什么吗?