Android SpeechRecognizer不会注意到麦克风输入
问题描述:
我有一个问题,我的Android应用程序。我的设备是Vuzix M300,我试图让语音控制工作。 我的问题是,当我初始化我的SpeechRecognizer并调用startListining方法时,一切都运行,期望没有语音被识别。我已经尝试了相同的代码在Android手机上工作得很好。Android SpeechRecognizer不会注意到麦克风输入
这里是我的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//grant access to internet
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
//set layout
setContentView(R.layout.activity_main);
speechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
speechRecognizerIntent = new Intent(RecognizerIntent.ACTION_VOICE_SEARCH_HANDS_FREE);
speechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
speechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getApplication().getPackageName());
speechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "de-DE");
speechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, false);
speechRecognizer.setRecognitionListener(prepareRegnitionListener());
speechRecognizer.startListening(speechRecognizerIntent);
//startListening(0);
}
private RecognitionListener prepareRegnitionListener() {
// TODO Auto-generated method stub
return new RecognitionListener() {
@Override
public void onRmsChanged(float rmsdB) {
//Didn´t use
}
@Override
public void onResults(Bundle results) {
ArrayList<String> matches = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
Log.d(MainActivity,"Completed speech recognition: Result: " + matches);
String match = matches.get(0);
}
@Override
public void onReadyForSpeech(Bundle params) {
Log.d(MainActivity, "ReadyforSpeech");
}
@Override
public void onPartialResults(Bundle partialResults) {
// Nothing
ArrayList<String> matches = partialResults.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
Log.d(MainActivity,"Completed speech recognition: Result: " + matches);
}
@Override
public void onEvent(int eventType, Bundle params) {
// Nothing
}
@Override
public void onError(int error) {
switch (error){
case SpeechRecognizer.ERROR_AUDIO:
Log.e(MainActivity,"Failed to recognize speech: Audio recording error.");
startListening(1000);
break;
case SpeechRecognizer.ERROR_CLIENT:
Log.e(MainActivity,"Failed to recognize speech: Insufficient permissions.");
startListening(1000);
break;
case SpeechRecognizer.ERROR_NO_MATCH:
Log.d(MainActivity,"Failed to recognize speech: No recognition results matched. Retrying...");
startListening(1000);
break;
default:
Log.e(MainActivity,"Failed to recognize speech. Unknown error" + error);
startListening(1000);
}
}
@Override
public void onEndOfSpeech() {
Log.d(MainActivity, "EndofSpeech");
}
@Override
public void onBufferReceived(byte[] buffer) {
//Didn´t use
}
@Override
public void onBeginningOfSpeech() {
Log.d(MainActivity, "beginnofSpeech");//Do something when speaking starts
}
};
}
private void startListening(int delay){
if(delay > 0){
Timer t = new Timer();
t.schedule(new TimerTask(){
@Override
public void run() {
mainHandler.post(new Runnable() {
@Override
public void run() {
speechRecognizer.startListening(speechRecognizerIntent);
Log.d(MainActivity,"Start delayed listening to speech");
speechRecognizer.stopListening();
}
});
}}
, delay);
}else{
speechRecognizer.startListening(speechRecognizerIntent);
Log.d(MainActivity,"Start instant listening to speech.");
}
}
我运行的是VUZIX与Android 6和VUZIX固件1.2(最新版)。
我得到错误代码ERROR_SPEECH_TIMEOUT就像我会得到,如果没有语音输入(但我给)。
我已经试过几件事情就像使用startActivityForResult方法获取语音控制运行(具有相同的结果...)
答
你必须设置权限为您的应用程序和手动为谷歌的APK,之后它在我的应用程序中使用Google语音识别器工作。
尝试DroidSpeech,这需要照顾所有繁重的工作,并且它很容易实现 - https://github.com/vikramezhil/DroidSpeech –