暂停其他媒体应用程序



当我启动MediaPlayer时,其他正在播放音频的应用程序不会停止。使用MediaRecorder时也是如此。

我设法使用AudioManager来获得一些功能,但该类的大部分内容要么被弃用,要么用于高级API。

例如,我可以注册回调,但不能注销它,因为abandonAudioFocus()已弃用。

查看来源,它告诉我使用MediaSession,但这对于我播放简单录音的简单目标来说太复杂了,我不想使用每个Android平台的所有功能。

您可以使用AudioManager

AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
// Request audio focus for playback
int result = am.requestAudioFocus(focusChangeListener,
// Use the music stream.
AudioManager.STREAM_MUSIC,
// Request permanent focus.
AudioManager.AUDIOFOCUS_GAIN);

if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
// other app had stopped playing song now , so u can do u stuff now .
}

音频焦点依次分配给每个请求它的应用程序。这意味着,如果另一个应用程序请求音频聚焦应用程序将丢失它。您将收到音频丢失的通知通过音频焦点更改的onAudioFocusChange处理程序聚焦请求音频焦点时注册的侦听器

private OnAudioFocusChangeListener focusChangeListener =
new OnAudioFocusChangeListener() {
public void onAudioFocusChange(int focusChange) {
AudioManager am =(AudioManager)getSystemService(Context.AUDIO_SERVICE);
switch (focusChange) {
case (AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) :
// Lower the volume while ducking.
mediaPlayer.setVolume(0.2f, 0.2f);
break;
case (AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) :
pause();
break;
case (AudioManager.AUDIOFOCUS_LOSS) :
stop();
ComponentName component =new ComponentName(AudioPlayerActivity.this,MediaControlReceiver.class);
am.unregisterMediaButtonEventReceiver(component);
break;
case (AudioManager.AUDIOFOCUS_GAIN) :
// Return the volume to normal and resume if paused.
mediaPlayer.setVolume(1f, 1f);
mediaPlayer.start();
break;
default: break;
}
}
};

最新更新