Как я могу использовать Google Voice Typing в моем приложении?

Я пытаюсь добавить кнопку в свое приложение, которое запускает Google Voice Typing (или распознавание речи по умолчанию). Я пробовал использовать этот учебник. Этот урок невероятно запутанный для меня. Я импортировал .jar и добавил необходимые разрешения, службы и действия в свой манифест. Но я не могу понять, как "собрать все это вместе". Мне интересно:

  • Я должен был вызвать inputMethodService с моей кнопки, щелкнув в моей основной деятельности? Или мой метод вводаMethodService стал главной моей деятельностью?
  • Что означает IME? Я попытался это сделать Google, но определения, которые он дал мне, не помогли мне понять.
  • Когда я пытаюсь скопировать и вставить весь код DemoInputMethodService в мою текущую деятельность, я получаю сообщение об ошибке, что я не могу расширить InputMethodService внутри этой операции. (Который ведет назад, чтобы задать вопрос один.)

Как я могу заставить это работать?

Ответ 1

Если вы хотите следовать руководству, которое вы упомянули, вам сначала нужно реализовать IME (редактор метода ввода), см. http://developer.android.com/guide/topics/text/creating-input-method.html

Этот IME может иметь обычный внешний вид клавиатуры или содержать только кнопку микрофона.

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

В учебном пособии представлена ​​банка, позволяющая напрямую обращаться к распознавателю Google. Было бы лучше, если бы вместо этого вы вызывали распознаватель через интерфейс SpeechRecognizer (http://developer.android.com/reference/android/speech/SpeechRecognizer.html), таким образом пользователь может решить, использовать ли Google или что-то еще.

SpeechRecognizer предоставляется прослушиватель, который поддерживает метод onPartialResults, который позволяет отслеживать гипотезы распознавания, пока пользователь Говорящий. Это зависит от вас, как вы их показываете. Обратите внимание, однако, что спецификация SpeechRecognizer не обещает, что этот метод вызван. Это зависит от реализации услуги распознавателя. Что касается реализации Google: то, что она поддерживает, продолжает меняться без предупреждения, у нее нет публичного API и даже выпусков.

Возможно, вы сможете повторно использовать мой проект Kõnele (http://kaljurand.github.io/K6nele/about/), который содержит две реализации SpeechRecognizer и IME, который использует их. Одна из реализаций предлагает непрерывное распознавание произвольно длинного аудиовхода с использованием сервера Kaldi GStreamer (https://github.com/alumae/kaldi-gstreamer-server). Вам нужно будет настроить свой собственный экземпляр сервера, поместив его на язык, который вы хотите распознать (если вы не хотите использовать эстонский сервер, который по умолчанию использует Kõnele).

Ответ 2

Образцы распознавания голоса находятся там, где у вас есть SDK android.

Пример:

$ find $SDK_ROOT/samples -name *recogni*


./android-19/legacy/VoiceRecognitionService/res/xml/recognizer.xml
./android-19/legacy/VoiceRecognitionService/src/com/example/android/voicerecognitionservice
./android-19/legacy/ApiDemos/res/layout/voice_recognition.xml
./android-18/legacy/VoiceRecognitionService/res/xml/recognizer.xml
./android-18/legacy/VoiceRecognitionService/src/com/example/android/voicerecognitionservice
./android-18/legacy/ApiDemos/res/layout/voice_recognition.xml
./android-21/legacy/VoiceRecognitionService/res/xml/recognizer.xml
./android-21/legacy/VoiceRecognitionService/src/com/example/android/voicerecognitionservice
./android-21/legacy/ApiDemos/res/layout/voice_recognition.xml

любая из служб должна помочь показать, как сделать RecognizerIntent

"APIDemo", похоже, включает использование RecognizerIntent. проверьте источник для этого. В противном случае загляните в сервисы и разведите их в намерение.

Ответ 3

У меня была одна и та же проблема, но после долгого времени я искал непрерывную голосовую диктовку активности, я решил эту проблему, используя pocketsphinx.

Я не мог найти способ интегрировать Google Voice Typing в действие, просто по методу ввода, следуя этому учебнику. Если это вас смущает, просто скачайте demo и измените его. Удачи!

Ответ 4

Вы можете вызвать намерение из прослушивателя кнопок

Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);

И результат может быть получен из

private TextToSpeech mTts;
protected void onActivityResult(
        int requestCode, int resultCode, Intent data) {
    if (requestCode == MY_DATA_CHECK_CODE) {
        if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
            // success, create the TTS instance
            mTts = new TextToSpeech(this, this);
        } else {
            // missing data, install it
            Intent installIntent = new Intent();
            installIntent.setAction(
                TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
            startActivity(installIntent);
        }
    }
}

Обратитесь к этой ссылке для получения дополнительной информации.