Как приостановить воспроизведение аудио / музыки в моем приложении после запуска голосового поиска Google (распознавания речи)? - PullRequest
3 голосов
/ 18 апреля 2011

Я сделал Audio-Player и мне нужно приостановить его, когда пользователь запускает Google Voice Search.

Я только что попробовал 2 способа, но все не удалось

  1. Напишите получателя для получения цели широковещательного действия "android.speech.action.RECOGNIZE_SPEECH", но он вообще не работает, не может получить обратный вызов из голосового поиска.

  2. Написать сервисчтобы получить SpeechRecognizer следующим образом (частично из моих кодов)

код:

  public class VoiceSearchMonitor extends Service
  {
      @Override
      public IBinder onBind(Intent intent)
      {
        // TODO Auto-generated method stub
        return null;
      }

      @Override
      public void onCreate()
      {
        // Get SpeechRecognizer
        SpeechRecognizer recognizer = SpeechRecognizer.createSpeechRecognizer(context);

        // Create a new RecognitionListener
        RecognitionListener listener = new RecognitionListener()
        {
           @Override
           public void onReadyForSpeech(Bundle params) 
           {
              // *** I want to pause my audio here ***
           }     

           @Override
           public void onEndOfSpeech()
           {
              // *** I want to resume my audio here ***
           }
        }

        // make an intent
        Intent intent = new Intent("android.speech.action.RECOGNIZE_SPEECH");

        // Start listening
        recognizer.setRecognitionListener(listener);
        recognizer.startListening(intent);
      }
   }

Просто не могу получить обратный вызов onReadyForSpeech, 'onEndOfSpeech' послеЯ запускаю Голосовой поиск, поэтому у меня нет возможности приостановить звук.Мне просто интересно, есть ли способ получить экземпляр SpeechRecognizer голосового поиска Google, чтобы я мог правильно получить обратный вызов ??

Кто-нибудь знает ответ на мой вопрос?Спасибо за помощь !!!

Радость

1 Ответ

1 голос
/ 14 февраля 2012

Я изначально выбрал тот же маршрут для этой проблемы, но решение состоит в том, чтобы использовать AudioManager, а не SpeechRecognizer.

Наше приложение уже использовало пользовательский прослушиватель для AudioManager.OnAudioFocusChangeListener и правильно отвечало на состояния AUDIOFOCUS_GAIN и AUDIOFOCUS_LOSS. Оказывается, что голосовой поиск вызывает состояние AUDIOFOCUS_LOSS_TRANSIENT, поэтому добавление этого к слушателю изменений привело к приостановке воспроизведения во время выполнения голосового поиска.

Подведем итог:

Создать слушателя

AudioManager.OnAudioFocusChangeListener audioFocusListener = 
    new AudioManager.OnAudioFocusChangeListener() {
    @Override
    public void onAudioFocusChange(int focusChange) {
        Logging.d(TAG, "audiofocus change");
        if(focusChange == AudioManager.AUDIOFOCUS_LOSS || focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT)
            suspendPlayback();
        if(focusChange == AudioManager.AUDIOFOCUS_GAIN)
            resumePlayback();
    }
};

Получить AudioManager, запросить фокус и передать слушателю

AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
int result = audioManager.requestAudioFocus(audioFocusListener, AudioManager.STREAM_MUSIC,
            AudioManager.AUDIOFOCUS_GAIN);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...