android语音识别不起作用

时间:2015-04-08 15:07:36

标签: android android-widget android-service speech-recognition

我知道有很多关于此的帖子,我已经阅读了所有这些帖子(至少感觉如此)。然而,我的服务完全拒绝工作。

简而言之:我有一个小部件可以在点击时启动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

没有产生任何结果。有什么建议吗?

0 个答案:

没有答案