昨天晚上我在电话中注意到了它。我的应用程序包含一个在线媒体播放器,该播放器可以自动恢复并暂停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);
}
}
修改:检查我的答案
答案 0 :(得分:0)
您的“ AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK”情况表示“当您的应用失去焦点(DUCK的意思是:以一种特殊的方式,它可以减小其音频的音量,而另一个应用以正常音量播放时,请注意),请检查播放器是否处于暂停,如果是,则启动它。”
因此,我想还有其他一些需要使用DUCK变体的AudioFocus应用程序,并且您的播放器会在那一刻恢复运行。
我建议将该Case移到其他所有“ LOSS _...”中,或者只是通过让该Case单独存在而检测到DUCK动作时才管理“减少音量的动作”。
答案 1 :(得分:0)
我从here得到了一个解决方案。发布它可能对某人有帮助。 我们必须致电
0<i<5
当用户启动暂停方法时。 处于暂停状态时,这可能不会导致您的应用重新获得焦点。并且很高兴在这个用例中解决了我的问题:')