繁体   English   中英

如何在启动谷歌的语音搜索(语音识别)后暂停我的应用程序的音频/音乐?

[英]How to pause my application's audio/music after launching google's Voice Search (Speech Recognition)?

我制作了一个音频播放器,我需要在用户启动谷歌语音搜索时暂停它。

我只尝试了两种方法,但都失败了

  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实例,这样我才能正确获得回调?

有谁知道我的问题的答案? 谢谢你的帮助!

喜悦

我最初为此问题采取了相同的路线,但解决方案是使用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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM