当媒体播放器处于暂停状态时,为什么它会专注于AudioFocusChange?

时间:2018-11-17 06:54:24

标签: java android

昨天晚上我在电话中注意到了它。我的应用程序包含一个在线媒体播放器,该播放器可以自动恢复并暂停onAudioFocusChange

代码如下:

@Override
    public void onAudioFocusChange(int focusChange) {
        switch (focusChange) {
            case AudioManager.AUDIOFOCUS_GAIN:
            case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
                if (!mMediaPlayer.isPlaying())
                    mMediaPlayer.start();
                // Resume your media player here
                break;
            case AudioManager.AUDIOFOCUS_LOSS:
            case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                if (mMediaPlayer.isPlaying())
                    mMediaPlayer.pause();
                // Pause your media player here
                break;
        }
    }

但是当它已经暂停并且有电话打进来时,在切断通话后它会再次开始,并且状态仍然显示为暂停状态。

这是我的切换按钮,导致媒体播放器暂停或播放。

private void togglePlayPause() {
        if (mMediaPlayer.isPlaying()) {
            mMediaPlayer.pause();
            nowplaying.setText("Offline");
            mPlayerControl.setImageResource(R.drawable.ic_play_circle_filled);
       //call abandonaudiofocus here     

        } else {
            mMediaPlayer.start();
            nowplaying.setText("Now Playing");
            mPlayerControl.setImageResource(R.drawable.ic_pause_circle_filled);

        }
    }

修改:检查我的答案

2 个答案:

答案 0 :(得分:0)

您的“ AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK”情况表示“当您的应用失去焦点(DUCK的意思是:以一种特殊的方式,它可以减小其音频的音量,而另一个应用以正常音量播放时,请注意),请检查播放器是否处于暂停,如果是,则启动它。”

因此,我想还有其他一些需要使用DUCK变体的AudioFocus应用程序,并且您的播放器会在那一刻恢复运行。

我建议将该Case移到其他所有“ LOSS _...”中,或者只是通过让该Case单独存在而检测到DUCK动作时才管理“减少音量的动作”。

答案 1 :(得分:0)

我从here得到了一个解决方案。发布它可能对某人有帮助。 我们必须致电

0<i<5

当用户启动暂停方法时。 处于暂停状态时,这可能不会导致您的应用重新获得焦点。并且很高兴在这个用例中解决了我的问题:')