Android 需要帮助!语音识别错误
大家好,安卓开发者们,我正在尝试在没有谷歌对话的情况下实现自己的语音识别。但它在我拥有的几乎真实的设备上不起作用。错误Android 需要帮助!语音识别错误,android,speech-recognition,speech-to-text,Android,Speech Recognition,Speech To Text,大家好,安卓开发者们,我正在尝试在没有谷歌对话的情况下实现自己的语音识别。但它在我拥有的几乎真实的设备上不起作用。错误语音识别器:绑定到识别服务失败。但它在三星galaxy win 4.3上运行,尽管存在一些缺陷。真的需要sombody的帮助。非常感谢:)。这是我的代码: 舱单: <?xml version="1.0" encoding="utf-8"?> MainActivity.java: package com.example.thuytram.demo_spee
语音识别器:绑定到识别服务失败
。但它在三星galaxy win 4.3上运行,尽管存在一些缺陷。真的需要sombody的帮助。非常感谢:)。这是我的代码:
舱单:
<?xml version="1.0" encoding="utf-8"?>
MainActivity.java:
package com.example.thuytram.demo_speech_recognition;
import java.util.ArrayList;
import android.speech.RecognitionListener;
import android.speech.RecognizerIntent;
import android.speech.SpeechRecognizer;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.ToggleButton;
public class MainActivity extends Activity implements
RecognitionListener {
private TextView returnedText;
private ToggleButton toggleButton;
private ProgressBar progressBar;
private SpeechRecognizer speech = null;
private Intent recognizerIntent;
private String LOG_TAG = "VoiceRecognitionActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
returnedText = (TextView) findViewById(R.id.textView1);
progressBar = (ProgressBar) findViewById(R.id.progressBar1);
toggleButton = (ToggleButton) findViewById(R.id.toggleButton1);
progressBar.setVisibility(View.INVISIBLE);
speech = SpeechRecognizer.createSpeechRecognizer(this);
speech.setRecognitionListener(this);
recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE,
"en");
recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,
this.getPackageName());
recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
recognizerIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3);
toggleButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
progressBar.setVisibility(View.VISIBLE);
progressBar.setIndeterminate(true);
speech.startListening(recognizerIntent);
} else {
progressBar.setIndeterminate(false);
progressBar.setVisibility(View.INVISIBLE);
speech.stopListening();
}
}
});
}
@Override
public void onResume() {
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
if (speech != null) {
speech.destroy();
Log.i(LOG_TAG, "destroy");
}
}
@Override
public void onBeginningOfSpeech() {
Log.i(LOG_TAG, "onBeginningOfSpeech");
progressBar.setIndeterminate(false);
progressBar.setMax(10);
}
@Override
public void onBufferReceived(byte[] buffer) {
Log.i(LOG_TAG, "onBufferReceived: " + buffer);
}
@Override
public void onEndOfSpeech() {
Log.i(LOG_TAG, "onEndOfSpeech");
progressBar.setIndeterminate(true);
toggleButton.setChecked(false);
}
@Override
public void onError(int errorCode) {
String errorMessage = getErrorText(errorCode);
Log.d(LOG_TAG, "FAILED " + errorMessage);
returnedText.setText(errorMessage);
toggleButton.setChecked(false);
}
@Override
public void onEvent(int arg0, Bundle arg1) {
Log.i(LOG_TAG, "onEvent");
}
@Override
public void onPartialResults(Bundle arg0) {
Log.i(LOG_TAG, "onPartialResults");
}
@Override
public void onReadyForSpeech(Bundle arg0) {
Log.i(LOG_TAG, "onReadyForSpeech");
}
@Override
public void onResults(Bundle results) {
Log.i(LOG_TAG, "onResults");
ArrayList<String> matches = results
.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
String text = "";
for (String result : matches)
text += result + "\n";
returnedText.setText(text);
}
@Override
public void onRmsChanged(float rmsdB) {
Log.i(LOG_TAG, "onRmsChanged: " + rmsdB);
progressBar.setProgress((int) rmsdB);
}
public static String getErrorText(int errorCode) {
String message;
switch (errorCode) {
case SpeechRecognizer.ERROR_AUDIO:
message = "Audio recording error";
break;
case SpeechRecognizer.ERROR_CLIENT:
message = "Client side error";
break;
case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS:
message = "Insufficient permissions";
break;
case SpeechRecognizer.ERROR_NETWORK:
message = "Network error";
break;
case SpeechRecognizer.ERROR_NETWORK_TIMEOUT:
message = "Network timeout";
break;
case SpeechRecognizer.ERROR_NO_MATCH:
message = "No match";
break;
case SpeechRecognizer.ERROR_RECOGNIZER_BUSY:
message = "RecognitionService busy";
break;
case SpeechRecognizer.ERROR_SERVER:
message = "error from server";
break;
case SpeechRecognizer.ERROR_SPEECH_TIMEOUT:
message = "No speech input";
break;
default:
message = "Didn't understand, please try again.";
break;
}
return message;
}
}
package com.example.thuytram.demo\u语音识别;
导入java.util.ArrayList;
导入android.speech.RecognitionListener;
导入android.speech.RecognizerIntent;
导入android.SpeechRecognizer;
导入android.app.Activity;
导入android.content.Intent;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.view;
导入android.widget.CompoundButton;
导入android.widget.CompoundButton.OnCheckedChangeListener;
导入android.widget.ProgressBar;
导入android.widget.TextView;
导入android.widget.ToggleButton;
公共类MainActivity扩展活动实现
识别侦听器{
私有文本视图返回文本;
私有切换按钮切换按钮;
私人ProgressBar ProgressBar;
专用语音识别器语音=null;
私人意图识别人意图;
私有字符串LOG_TAG=“VoiceRecognitionActivity”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
returnedText=(TextView)findViewById(R.id.textView1);
progressBar=(progressBar)findViewById(R.id.progressBar1);
toggleButton=(toggleButton)findViewById(R.id.toggleButton1);
progressBar.setVisibility(View.INVISIBLE);
SpeechRecognizer.createSpeechRecognizer(此);
speech.setRecognitionListener(此);
recognizerIntent=新意图(recognizerIntent.ACTION\u recognizer\u SPEECH);
recognizerIntent.putExtra(recognizerIntent.EXTRA_语言_首选项,
“en”);
recognizerIntent.putExtra(recognizerIntent.EXTRA_调用_包,
这个.getPackageName());
recognizerIntent.putExtra(recognizerIntent.EXTRA_语言_模型,
识别者意图、语言、模型、网络搜索);
recognizerIntent.putExtra(recognizerIntent.EXTRA_最大_结果,3);
setOnCheckedChangeListener(新的OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,
布尔值(已检查){
如果(已检查){
progressBar.setVisibility(View.VISIBLE);
progressBar.SetUndeterminate(真);
演讲。听讲(识别意图);
}否则{
progressBar.SetUndeterminate(假);
progressBar.setVisibility(View.INVISIBLE);
停止听;
}
}
});
}
@凌驾
恢复时公开作废(){
super.onResume();
}
@凌驾
受保护的void onPause(){
super.onPause();
if(语音!=null){
演讲。破坏();
Log.i(Log_标签,“销毁”);
}
}
@凌驾
开始时的公共无效fSpeech(){
Log.i(Log_标签,“onbeginingofspeech”);
progressBar.SetUndeterminate(假);
progressBar.setMax(10);
}
@凌驾
已接收公共无效onBufferReceived(字节[]缓冲区){
Log.i(Log_标签,“onBufferReceived:”+buffer);
}
@凌驾
公共无效onEndOfSpeech(){
Log.i(Log_标签,“onEndOfSpeech”);
progressBar.SetUndeterminate(真);
toggleButton.setChecked(假);
}
@凌驾
公共无效onError(内部错误代码){
字符串errorMessage=getErrorText(errorCode);
Log.d(日志标签,“失败”+错误消息);
returnedText.setText(错误消息);
toggleButton.setChecked(假);
}
@凌驾
public void onEvent(int arg0,Bundle arg1){
Log.i(Log_标签,“onEvent”);
}
@凌驾
public void on PartialResults(捆绑包arg0){
Log.i(Log_标签,“onPartialResults”);
}
@凌驾
ReadyForSpeech上的公共无效(捆绑arg0){
Log.i(Log_标签,“onReadyForSpeech”);
}
@凌驾
公共结果(捆绑结果){
Log.i(Log_标签,“onResults”);
ArrayList匹配=结果
.getStringArrayList(SpeechRecognitor.RESULTS_RECOGNITION);
字符串文本=”;
for(字符串结果:匹配项)
文本+=结果+“\n”;
returnedText.setText(文本);
}
@凌驾
在RMSCHANGED上的公共无效(浮动rmsdB){
Log.i(Log_标签,onRmsChanged:+rmsdB);
progressBar.setProgress((int)rmsdB);
}
公共静态字符串getErrorText(int errorCode){
字符串消息;
开关(错误代码){
case SpeechRecognizer.ERROR\u音频:
message=“音频录制错误”;
打破
案例SpeechRecognizer.ERROR\u客户端:
message=“客户端错误”;
打破
案例SpeechRecognizer.ERROR\u权限不足\u:
message=“权限不足”;
打破
案例SpeechRecognizer.ERROR\u网络:
message=“网络错误”;
打破
案例语音识别器。错误\网络\超时:
message=“网络超时”;
打破
case SpeechRecognizer.ERROR\u NO\u匹配:
message=“不匹配”;
打破
案例SpeechRecognizer.ERROR\u RECOGNIZER\u BUSY:
message=“识别服务正忙”;
打破
案例SpeechRecognizer.ERROR\u服务器:
message=“错误来自
package com.example.thuytram.demo_speech_recognition;
import java.util.ArrayList;
import android.speech.RecognitionListener;
import android.speech.RecognizerIntent;
import android.speech.SpeechRecognizer;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.ToggleButton;
public class MainActivity extends Activity implements
RecognitionListener {
private TextView returnedText;
private ToggleButton toggleButton;
private ProgressBar progressBar;
private SpeechRecognizer speech = null;
private Intent recognizerIntent;
private String LOG_TAG = "VoiceRecognitionActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
returnedText = (TextView) findViewById(R.id.textView1);
progressBar = (ProgressBar) findViewById(R.id.progressBar1);
toggleButton = (ToggleButton) findViewById(R.id.toggleButton1);
progressBar.setVisibility(View.INVISIBLE);
speech = SpeechRecognizer.createSpeechRecognizer(this);
speech.setRecognitionListener(this);
recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE,
"en");
recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,
this.getPackageName());
recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
recognizerIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3);
toggleButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
progressBar.setVisibility(View.VISIBLE);
progressBar.setIndeterminate(true);
speech.startListening(recognizerIntent);
} else {
progressBar.setIndeterminate(false);
progressBar.setVisibility(View.INVISIBLE);
speech.stopListening();
}
}
});
}
@Override
public void onResume() {
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
if (speech != null) {
speech.destroy();
Log.i(LOG_TAG, "destroy");
}
}
@Override
public void onBeginningOfSpeech() {
Log.i(LOG_TAG, "onBeginningOfSpeech");
progressBar.setIndeterminate(false);
progressBar.setMax(10);
}
@Override
public void onBufferReceived(byte[] buffer) {
Log.i(LOG_TAG, "onBufferReceived: " + buffer);
}
@Override
public void onEndOfSpeech() {
Log.i(LOG_TAG, "onEndOfSpeech");
progressBar.setIndeterminate(true);
toggleButton.setChecked(false);
}
@Override
public void onError(int errorCode) {
String errorMessage = getErrorText(errorCode);
Log.d(LOG_TAG, "FAILED " + errorMessage);
returnedText.setText(errorMessage);
toggleButton.setChecked(false);
}
@Override
public void onEvent(int arg0, Bundle arg1) {
Log.i(LOG_TAG, "onEvent");
}
@Override
public void onPartialResults(Bundle arg0) {
Log.i(LOG_TAG, "onPartialResults");
}
@Override
public void onReadyForSpeech(Bundle arg0) {
Log.i(LOG_TAG, "onReadyForSpeech");
}
@Override
public void onResults(Bundle results) {
Log.i(LOG_TAG, "onResults");
ArrayList<String> matches = results
.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
String text = "";
for (String result : matches)
text += result + "\n";
returnedText.setText(text);
}
@Override
public void onRmsChanged(float rmsdB) {
Log.i(LOG_TAG, "onRmsChanged: " + rmsdB);
progressBar.setProgress((int) rmsdB);
}
public static String getErrorText(int errorCode) {
String message;
switch (errorCode) {
case SpeechRecognizer.ERROR_AUDIO:
message = "Audio recording error";
break;
case SpeechRecognizer.ERROR_CLIENT:
message = "Client side error";
break;
case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS:
message = "Insufficient permissions";
break;
case SpeechRecognizer.ERROR_NETWORK:
message = "Network error";
break;
case SpeechRecognizer.ERROR_NETWORK_TIMEOUT:
message = "Network timeout";
break;
case SpeechRecognizer.ERROR_NO_MATCH:
message = "No match";
break;
case SpeechRecognizer.ERROR_RECOGNIZER_BUSY:
message = "RecognitionService busy";
break;
case SpeechRecognizer.ERROR_SERVER:
message = "error from server";
break;
case SpeechRecognizer.ERROR_SPEECH_TIMEOUT:
message = "No speech input";
break;
default:
message = "Didn't understand, please try again.";
break;
}
return message;
}
}