当另一个正在录制时,停止我的应用播放媒体

时间:2018-07-05 11:19:12

标签: java android

因此,我制作了一个音乐应用,该音乐应用播放类似于广播的流,但是我注意到当我的应用正在播放音频并且用户决定在Whatsapp上发送语音便笺时,我的应用不会停止播放音频。我已经实现了电话功能,如果有电话到达,它就会停止。

有什么想法我会怎么做?

我正在研究Audio Focus,但是我认为这不是我所需要的。

2 个答案:

答案 0 :(得分:0)

您需要按以下说明管理音频焦点:https://developer.android.com/guide/topics/media-apps/audio-focus

在有人要求音频焦点并开始播放一些音频的同时,将举行Audio Focus,同时向所有正在收听Audio Focus更改的所有人广播“系统通知”,以便他们停止操作(在您的录音中例如)让音频成为唯一的音频。 此“锁定”可以是“排他”(只有储物柜可以播放音频)或“与其他音频混合”(两种音频都可以一起播放/录制,但较新的音量或优先级更高)。

答案 1 :(得分:-1)

我还没有看到任何面向回调的方法来解决此问题,但是this SO question:

上发布了一个很棒的解决方案
private boolean validateMicAvailability(){
    Boolean available = true;
    AudioRecord recorder =
            new AudioRecord(MediaRecorder.AudioSource.MIC, 44100,
                    AudioFormat.CHANNEL_IN_MONO,
                    AudioFormat.ENCODING_DEFAULT, 44100);
    try{
        if(recorder.getRecordingState() != AudioRecord.RECORDSTATE_STOPPED ){
            available = false;

        }

        recorder.startRecording();
        if(recorder.getRecordingState() != AudioRecord.RECORDSTATE_RECORDING){
            recorder.stop();
            available = false;

        }
        recorder.stop();
    } finally{
        recorder.release();
        recorder = null;
    }

    return available;
}

只有这样,我才能看到这项工作是在后台定时任务线程上对其进行轮询的。 This post对于如何实现这一点有两个答案,并且肯定会发现很多其他示例。

也许有一种方法可以从openSL添加回调方法,以便在状态改变时可以回避音乐音量或所需的音量,但是似乎人们正在努力实现这一目标。