Общие сведения о службе распознавания голоса

Я пытаюсь понять работу RecognitionService и RecognitionService.Callback. Я новичок в этой среде и хотел бы знать, как вызвать функцию onStartListening() в RecognitionService. Я видел сообщение Как зарегистрировать пользовательскую службу распознавания речи ? но я вставил сообщения журнала во все основные функции, чтобы увидеть, какая из них когда вызывается.

Я также просмотрел пример приложения в SDK, но он довольно плохо объясняет, как все происходит. Я хочу вызвать startService из действия.

Я использую следующее намерение

Intent startServiceIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    startServiceIntent.setClass(this, SimpleVoiceService.class);

    startService(startServiceIntent);

Может кто-нибудь, пожалуйста, помогите мне заставить это работать. Было бы здорово, если бы кто-нибудь мог указать мне на учебник по этому вопросу или описать общий процесс того, как это сделать.

Большое спасибо.


person nehiljain    schedule 25.07.2012    source источник


Ответы (1)


Основная идея состоит в том, чтобы использовать SpeechRecognizer для подключения к RecognitionService, который пользователь выбрал в общих настройках Android.

SpeechRecognizer sr = SpeechRecognizer.createSpeechRecognizer(context);
sr.setRecognitionListener(new RecognitionListener() {
    @Override
    public void onResults(Bundle b) { /* ... */ }

    // other required methods
});

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, "");
sr.startListening(intent);

Вы должны обеспечить реализацию RecognitionListener-методов, позволяющих обновлять пользовательский интерфейс в ответ на события распознавания речи (пользователь начал говорить, доступны частичные результаты, пользователь перестал говорить, транскрипция все еще продолжается, произошла ошибка и т. д.) .

См. полную реализацию в исходном коде некоторых клавиатурных приложений, например. класс VoiceInput в Hacker's Клавиатура.

person Kaarel    schedule 26.07.2012