我在提交 Android Auto 应用时收到以下反馈:
Your app does not support all of the required voice commands. Volume doesn't reduce when voice command is initiated on the Android Auto.
我认为这意味着当用户按下 Android Auto UI 中的 Speak/Mic 按钮(或者如果他们在音乐声中尖叫“Ok,Google”时,该应用程序应该降低播放音量(它是一个媒体播放器应用程序) , 我想)。
我猜另一种可能的解释是需要支持用于提高/降低音量的语音命令,但这似乎......不太可能。而且我在任何地方都没有看到任何此类 API Hook 。
所以我假设是前一种情况,我需要在语音识别开始时降低音量。
为此,我似乎需要收到有关该事件的通知(最好还收到有关语音识别何时结束的通知)。是否有广播 Intent 或其他方式在我的应用程序中捕获此内容,以便我可以在用户尝试说话时降低媒体播放音量?
最佳答案
找到了解决方案。应用需要监听的是音频焦点改变事件,比如:
@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
)。
关于Android - 当用户按下 'Speak' 按钮时是否有广播 Intent ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44734016/