我知道有很多关于此的帖子,我已经阅读了所有这些帖子(至少感觉如此)。然而,我的服务完全拒绝工作。
简而言之:我有一个小部件可以在点击时启动speecrecognizer服务。然后服务应该监听输入并(现在)将其打印到logcat。 服务正确启动(打印oncreate和ondestroy中的日志),但实际的语音识别部分不起作用。
我已在android清单中添加了该服务,并添加了“android.permission.RECORD_AUDIO”权限。
部分问题是
SpeechRecognizer.isRecognitionAvailable(this)
返回false。 以下是该服务的重要代码:
@Override
public void onCreate() {
super.onCreate();
mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
mSpeechRecognizer.setRecognitionListener(mListener);
if (SpeechRecognizer.isRecognitionAvailable(this))
Log.d(TAG, "we are go for speech recognition");
else
Log.d(TAG, "red light for speech recognition :c");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "i'm being destroyed :c");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "we made it");
playTtsForMessage("We made it", true);
speechIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
speechIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
speechIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, this.getPackageName());
mSpeechRecognizer.startListening(speechIntent);
Log.d(TAG, "started listening");
return super.onStartCommand(intent, flags, startId);
}
private void broadcastStopIntent() {
Intent intent = new Intent(Intents.ACTION_VOICE_COMMANDS_STOP);
AddApplication.getInstance().sendBroadcast(intent, null);
}
所有日志输出都会打印出来,除了我放在监听器中的输出。 如果有兴趣,这里是听众:
private RecognitionListener mListener = new RecognitionListener() {
@Override
public void onReadyForSpeech(Bundle params) {
// TODO Auto-generated method stub
}
@Override
public void onBeginningOfSpeech() {
// TODO Auto-generated method stub
Log.d(TAG, "speech started");
}
@Override
public void onRmsChanged(float rmsdB) {
// TODO Auto-generated method stub
}
@Override
public void onBufferReceived(byte[] buffer) {
// TODO Auto-generated method stub
}
@Override
public void onEndOfSpeech() {
// TODO Auto-generated method stub
Log.d(TAG, "speech ended");
broadcastStopIntent();
}
@Override
public void onError(int error) {
// TODO Auto-generated method stub
}
@Override
public void onResults(Bundle results) {
// TODO Auto-generated method stub
ArrayList<String> spoken = results
.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
String msg = "";
for (String s : spoken) {
msg += s + " ";
}
Log.d(TAG, "what i understood from that was: " + msg);
WidgetVoiceCommandProviderIntentService.this.stopSelf();
}
@Override
public void onPartialResults(Bundle partialResults) {
// TODO Auto-generated method stub
}
@Override
public void onEvent(int eventType, Bundle params) {
// TODO Auto-generated method stub
}
};
我尝试了这个人的解决方法:Android Speech Recognition as a service on Android 4.1 & 4.2
没有产生任何结果。有什么建议吗?