暂停其他媒体应用

时间:2018-11-25 09:29:08

标签: java android android-mediaplayer android-mediarecorder

启动MediaPlayer时,其他正在播放音频的应用程序不会停止。使用MediaRecorder时相同。

我设法使用AudioManager来具有某些功能,但是该类中的大多数要么已弃用,要么用于高级API。

例如,我可以注册一个回调,但是由于abandonAudioFocus()被弃用,因此我无法取消注册。

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

1 个答案:

答案 0 :(得分:1)

您可以使用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 .
}
  

依次将音频焦点分配给请求它的每个应用程序。   这意味着,如果另一个应用程序请求音频焦点,您的   应用程序将丢失它。您会收到音频丢失的通知   通过Audio Focus Change的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;
}
}
};