Before 2022/Android
안드로이드 Audio Focus를 이용하여 다른 앱 음악 일시 정지 시키기
Eljoe
2018. 12. 28. 15:55
private void audioFocus(Context context) { //메모리 누수 이슈로 AudioManager는 Application의 Context를 가져올 것! AudioManager mAudioManager = (AudioManager) context.getApplicationContext().getSystemService(Context.AUDIO_SERVICE); if(mAudioManager != null) { //첫 번째 인자로 listener를 줘야하지만, 음악 일시정지만 하고 싶은 경우엔 null로 준다. int result = mAudioManager.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); if(result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED){ Log.d(TAG, "not get audio focus"); } } }백그라운드(다른 앱)에서 음악이 재생 중일 때 "AUDIOFOCUS_GAIN"을 주면 우선 순위가 이동되어 다른 앱에서 실행중이던 음악이 일시 중단된다.
2019. 03. 15
위와 같은 기존 형태의 requestAudioFocus가 API 26 레벨에서 Deprecated되었다.
requestAudioFocus(AudioManager.OnAudioFocusChangeListener l, int streamType, int durationHint)
따라서 새로운 형태의 requestAudioFocus(AudioFocusRequest focusRequest)로 아래와 같은 코틀린 소스를 첨부한다.
val mAudioManager: AudioManager = context.applicationContext.getSystemService(Context.AUDIO_SERVICE) as AudioManager mAudioManager.requestAudioFocus(AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN) // 오디오 포커스를 영속적으로 획득 .setAudioAttributes(AudioAttributes.Builder() .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) .setUsage(AudioAttributes.USAGE_MEDIA) .build()) .setAcceptsDelayedFocusGain(true) .setOnAudioFocusChangeListener {} // 위 소스와 마찬가지 이유로 listner 구현 안함. .build())