1

I know there are quite a few posts about this already and I have read pretty much all of them (or so it feels at least). Yet my service refuses to work, at all.

In short: I have a widget that should launch the speecrecognizer service when clicked on. The service should then listen to input and (for now) print it out to logcat. The service starts correctly (the logs in oncreate and ondestroy are printed) but the actual voice recognition part doesn't work.

I have added the service in the android manifest and added the "android.permission.RECORD_AUDIO" permission.

Part of the issue is that

SpeechRecognizer.isRecognitionAvailable(this)

returns false. Here's the important bit of code from the service:

@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);
}

All the log outputs get printed, apart from the ones i've placed inside the listener. If interested, here's the listener:

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

    }

};

I tried this guy's workaround: Android Speech Recognition as a service on Android 4.1 & 4.2

Which yielded no results. Any suggestions?

Community
  • 1
  • 1
killernerd
  • 377
  • 2
  • 6
  • 21
  • 1
    Actually if SpeechRecognizer.isRecognitionAvailable(this) returns false your device has no SpeechRecognizer support. – Stan Apr 08 '15 at 15:23
  • @Stan that could explain why it isn't working and that would suck big time. – killernerd Apr 08 '15 at 15:29

0 Answers0