Android - 当用户按下 'Speak' 按钮时是否有广播 Intent ?

标签 android audio broadcastreceiver android-auto

我在提交 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/

相关文章:

android - 在 android 中的单选按钮中停止并播放

android - 除了第一个之外,所有 Intent 都收到了不正确的额外内容

java - Fragment 和 BroadcastReceiver 在几秒钟后卡住应用程序

c++ - 如何提高环形缓冲区代码的性能?

c# - 回传背景中的ASP.NET音乐

c++ - 读取Opus文件,搜索编码音频数据

android - 将我的应用程序转换为服务

java - Android - 内存泄漏?

java - 管理切换按钮的状态

java - AlarmManager:如何安排每日闹钟和处理时间变化