Android: как открыть речевой ввод с голосовой командой из моего приложения

С этим кодом:

private void promptSpeechInput() {
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
            RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
            getString(R.string.speech_prompt));
    try {
        startActivityForResult(intent, REQ_CODE_SPEECH_INPUT);
    } catch (ActivityNotFoundException a) {
        Toast.makeText(getApplicationContext(),
                getString(R.string.speech_not_supported),
                Toast.LENGTH_SHORT).show();
    }
}

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

Но теперь мне нужно вызвать этот метод с помощью командного голоса. Как и в Google сейчас, мы говорим «Окей, Google», и появляется приглашение голосового ввода. Я хочу сделать это внутри своего приложения. Например, я нахожусь в основном действии, и я говорю «послушайте меня», и вызывается метод promptSpeechInput.

Как я могу это сделать?

Спасибо за помощь.


person Bruno Bertelli    schedule 30.08.2016    source источник


Ответы (2)


Насколько мне известно, вы не можете объявить свои собственные слова пробуждения — вы застряли в OK Google. Вы можете использовать API голосовых действий, на который ссылается LychmanIT, но это будет обрабатывать намерения только ПОСЛЕ того, как вы скажете «ОК, Google».

Возможно, стоит изучить CMUSphynx. Он позволяет вам определять настраиваемых прослушивателей, но не является санкционированным Google решением для этого рабочего процесса, поэтому может не подойти вам, в зависимости от ваших требований. Тем не менее, у меня был некоторый успех в создании прототипов — он работает очень хорошо.

person Simon Phoenix    schedule 30.08.2016
comment
Спасибо @SimonPhoenix, это кажется мне полезным. Я создам тестовый проект, используя его, и я и я пришли предупредить вас. - person Bruno Bertelli; 02.09.2016

С помощью API Voice Actions ваше приложение может зарегистрироваться на системные действия, одним из которых является "поиск" (чтобы вы могли выполнить "поиск какого-либо вопроса или команды в приложении" ).

В прошлом некоторые разработчики могли отправить собственный запрос голосового действия. После утверждения пользователи могут выполнять определенные действия с вашим приложением с помощью голоса. Это больше не вариант.

person LychmanIT    schedule 30.08.2016
comment
Спасибо @LychmanIT, я проверил это, и это отлично работает. Это не лучший способ для решения, о котором я думал, но я могу сделать это: я могу включить «Окей, Google» на всех экранах. Когда пользователь находится в приложении, он теперь может выполнять поиск с помощью Google, и я могу получить эту команду и вызвать метод. Кажется, это не красивое решение, но пользователь может управлять приложением, используя только голосовую команду. - person Bruno Bertelli; 02.09.2016
comment
Я создал тестовый проект, и у меня возникла проблема. Поиск работает нормально на английском языке, но я из Бразилии, и поиск не работает даже для YouTube. Что ж, попробую по другому. - person Bruno Bertelli; 02.09.2016
comment
Да, кажется, вариант @Simon_Phoenix лучше моего. Удачи :) - person LychmanIT; 02.09.2016