How can I use speech recognition without the annoying dialog in android phones

在不修改 android API 的情况下,这可能吗? 我找到一篇关于这个的文章。 有一条评论说我应该对 android API 进行修改。 但没说怎么修改。 有人能给我一些关于如何做到这一点的建议吗? 谢谢!


我找到了这篇文章 语音识别器 他的需求几乎和我的一样。 这对我来说是一个很好的参考!


I've totally got this problem solved.
I googled a usable sample code 从这个中国网站 这是我的源代码

package voice.recognition.test;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.speech.RecognitionListener;
import android.speech.RecognizerIntent;
import android.speech.SpeechRecognizer;
import android.widget.Button;
import android.widget.TextView;
import java.util.ArrayList;
import android.util.Log;






public class voiceRecognitionTest extends Activity implements OnClickListener
{


private TextView mText;
private SpeechRecognizer sr;
private static final String TAG = "MyStt3Activity";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button speakButton = (Button) findViewById(R.id.btn_speak);
mText = (TextView) findViewById(R.id.textView1);
speakButton.setOnClickListener(this);
sr = SpeechRecognizer.createSpeechRecognizer(this);
sr.setRecognitionListener(new listener());
}


class listener implements RecognitionListener
{
public void onReadyForSpeech(Bundle params)
{
Log.d(TAG, "onReadyForSpeech");
}
public void onBeginningOfSpeech()
{
Log.d(TAG, "onBeginningOfSpeech");
}
public void onRmsChanged(float rmsdB)
{
Log.d(TAG, "onRmsChanged");
}
public void onBufferReceived(byte[] buffer)
{
Log.d(TAG, "onBufferReceived");
}
public void onEndOfSpeech()
{
Log.d(TAG, "onEndofSpeech");
}
public void onError(int error)
{
Log.d(TAG,  "error " +  error);
mText.setText("error " + error);
}
public void onResults(Bundle results)
{
String str = new String();
Log.d(TAG, "onResults " + results);
ArrayList data = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
for (int i = 0; i < data.size(); i++)
{
Log.d(TAG, "result " + data.get(i));
str += data.get(i);
}
mText.setText("results: "+String.valueOf(data.size()));
}
public void onPartialResults(Bundle partialResults)
{
Log.d(TAG, "onPartialResults");
}
public void onEvent(int eventType, Bundle params)
{
Log.d(TAG, "onEvent " + eventType);
}
}
public void onClick(View v) {
if (v.getId() == R.id.btn_speak)
{
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,"voice.recognition.test");


intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS,5);
sr.startListening(intent);
Log.i("111111","11111111");
}
}
}

一定要删除恼人的日志后调试!

77333 次浏览

使用 语音识别器接口。您的应用程序需要有 RECORD _ AUDIO 权限,然后您可以创建一个语音识别器,给它一个 识别监听器,然后调用它的 startListening方法。当语音识别器准备开始收听语音并接收语音并将其转换为文本时,您将收到对收听器的回调。

GAST 有一个方便的抽象类,您可以使用这个 SpeechRecognizer类,只需要很少的新代码。还有一个使用 这个这个作为后台服务运行 SpeechRecognizer的示例

感谢您发布这篇文章! 我发现在 oncreate 中定义 onclick 侦听器很有帮助:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


mText = (TextView) findViewById(R.id.textView1);
MyRecognitionListener listener = new MyRecognitionListener();
sr = SpeechRecognizer.createSpeechRecognizer(this);
sr.setRecognitionListener(listener);


findViewById(R.id.button1).setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v)
{
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "en-US");
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS,1);
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,"voice.recognition.test");
sr.startListening(intent);
}
});
}

I end up making Github project to convert Text to speech and speech to text without annoying dialog,

Https://github.com/hiteshsahu/android-tts-stt/tree/master/app/src/main/java/com/hiteshsahu/stt_tts/translation_engine

 //SPEECH TO TEXT DEMO
speechToText.setOnClickListener({ view ->


Snackbar.make(view, "Speak now, App is listening", Snackbar.LENGTH_LONG)
.setAction("Action", null).show()


TranslatorFactory
.instance
.with(TranslatorFactory.TRANSLATORS.SPEECH_TO_TEXT,
object : ConversionCallback {
override fun onSuccess(result: String) {
sttOutput.text = result
}


override fun onCompletion() {
}


override fun onErrorOccurred(errorMessage: String) {
erroConsole.text = "Speech2Text Error: $errorMessage"
}


}).initialize("Speak Now !!", this@HomeActivity)


})




//TEXT TO SPEECH DEMO
textToSpeech.setOnClickListener({ view ->


val stringToSpeak :String = ttsInput.text.toString()


if (null!=stringToSpeak &&  stringToSpeak.isNotEmpty()) {


TranslatorFactory
.instance
.with(TranslatorFactory.TRANSLATORS.TEXT_TO_SPEECH,
object : ConversionCallback {
override fun onSuccess(result: String) {
}


override fun onCompletion() {
}


override fun onErrorOccurred(errorMessage: String) {
erroConsole.text = "Text2Speech Error: $errorMessage"
}


})
.initialize(stringToSpeak, this)


} else {
ttsInput.setText("Invalid input")
Snackbar.make(view, "Please enter some text to speak", Snackbar.LENGTH_LONG).show()
}


})

enter image description here