Приостановить другие мультимедийные приложения - PullRequest
0 голосов
/ 25 ноября 2018

Когда я запускаю MediaPlayer, другие приложения, которые воспроизводят аудио, не останавливаются.То же самое при использовании MediaRecorder.

Мне удалось использовать AudioManager, чтобы иметь некоторую функциональность, но большая часть этого класса либо устарела, либо для API высокого уровня.

Например, я могу зарегистрироватьобратный вызов, но я не могу отменить его регистрацию, потому что abandonAudioFocus() устарел.

Глядя на источники, он говорит мне использовать MediaSession, но это слишком сложно для моей простой цели - воспроизвести простую запись.аудио, я не хочу использовать всю функциональность каждой отдельной платформы Android.

1 Ответ

0 голосов
/ 25 ноября 2018

Вы можете сделать это с помощью 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;
}
}
};
...