Android - 当用户按下“发言”按钮时是否存在广播意图?

时间:2017-06-24 07:29:59

标签: android audio broadcastreceiver android-auto

我在为Android Auto提交应用时收到以下反馈:

  

您的应用不支持所有必需的语音命令。体积   在Android Auto上启动语音命令时不会减少。

我认为这意味着当用户按下Android Auto UI中的Speak / Mic按钮时,应用程序应该减少播放音量(它是媒体播放器应用程序)(或者如果他们在声音中尖叫“Ok,Google”)我想他们的音乐)。

我想其他可能的解释是有语音命令用于提升/降低需要支持的音量,但这似乎......不太可能。我在任何地方都没有看到任何此类API挂钩。

所以我认为这是前一种情况,我需要在语音识别开始时减小音量。

要做到这一点,我似乎需要收到该事件的通知(最好还是语音识别何时结束的通知)。是否有一个boradcast意图或其他方式来捕获我的应用程序,以便我可以减少媒体播放音量,而用户试图说话?

1 个答案:

答案 0 :(得分:0)

找到解决方案。应用需要收听的是音频焦点变化事件,例如:

@Override
public void onAudioFocusChange(int focusChange) {
    AudioManager audioManager = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE);
    if (focusChange == AudioManager.AUDIOFOCUS_LOSS |+ focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) {
        pause();
        shouldPlayOnFocus = true;
    }
    else if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) {
        if (! isPlaying()) {
            return;
        }

        //reduce the playback volume
    }
    else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
        if (! isPlaying() && shouldPlayOnFocus) {
            start();
            shouldPlayOnFocus = false;
        }

        //restore stream volume if we reduced it earlier
    }
}

参考文档中对此进行了介绍:

https://developer.android.com/reference/android/media/AudioManager.OnAudioFocusChangeListener.html

只要按下“发言”按钮,Android Auto就会触发音频焦点事件(AUDIOFOCUS_LOSS_TRANSIENT)的瞬时丢失。