Guest User

Untitled

a guest
Jan 24th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.19 KB | None | 0 0
  1. /**
  2. * Used to indicate a transient loss of audio focus where the loser of the audio focus can
  3. * lower its output volume if it wants to continue playing (also referred to as "ducking"), as
  4. * the new focus owner doesn't require others to be silent.
  5. * @see OnAudioFocusChangeListener#onAudioFocusChange(int)
  6. */
  7.  
  8. private final OnAudioFocusChangeListener mAudioFocusListener = createOnAudioFocusChangeListener();
  9. private AudioManager mAudioManager = null;
  10. private boolean mHasAudioFocus = false;
  11. private void changeAudioFocus(boolean acquire) {
  12. if (mAudioManager == null)
  13. mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
  14. if (mAudioManager == null)
  15. return;
  16.  
  17. if (acquire) {
  18. if (!mHasAudioFocus) {
  19. final int result = mAudioManager.requestAudioFocus(mAudioFocusListener,
  20. AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
  21. if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
  22. mAudioManager.setParameters("bgm_state=true");
  23. mHasAudioFocus = true;
  24. }
  25. }
  26. } else if (mHasAudioFocus) {
  27. mAudioManager.abandonAudioFocus(mAudioFocusListener);
  28. mAudioManager.setParameters("bgm_state=false");
  29. mHasAudioFocus = false;
  30. }
  31. }
  32.  
  33. private OnAudioFocusChangeListener createOnAudioFocusChangeListener() {
  34. return new OnAudioFocusChangeListener() {
  35. int audioDuckLevel = -1;
  36. private int mLossTransientVolume = -1;
  37. private boolean wasPlaying = false;
  38.  
  39. @Override
  40. public void onAudioFocusChange(int focusChange) {
  41. /*
  42. * Pause playback during alerts and notifications
  43. */
  44. switch (focusChange) {
  45. case AudioManager.AUDIOFOCUS_LOSS:
  46. if (BuildConfig.DEBUG) Log.i(TAG, "AUDIOFOCUS_LOSS");
  47. // Pause playback
  48. changeAudioFocus(false);
  49. pause();
  50. break;
  51. case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
  52. if (BuildConfig.DEBUG) Log.i(TAG, "AUDIOFOCUS_LOSS_TRANSIENT");
  53. // Pause playback
  54. pausePlayback();
  55. break;
  56. case AudioManager.AUDIOFOCUS_GAIN:
  57. if (BuildConfig.DEBUG) Log.i(TAG, "AUDIOFOCUS_GAIN: ");
  58. // Resume playback
  59. if (mLossTransientVolume != -1) {
  60. mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mLossTransientVolume, 0);
  61. mLossTransientVolume = -1;
  62. }
  63. if (mLossTransient) {
  64. if (wasPlaying && mSettings.getBoolean("resume_playback", true))
  65. play();
  66. mLossTransient = false;
  67. }
  68. break;
  69. }
  70. }
  71.  
  72. private void pausePlayback() {
  73. if (mLossTransient) return;
  74. mLossTransient = true;
  75. wasPlaying = isPlaying();
  76. if (wasPlaying) pause();
  77. }
  78. };
  79. }
Add Comment
Please, Sign In to add comment