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())
'Before 2022 > Android' 카테고리의 다른 글
Fragment 다루기 (0) | 2019.01.15 |
---|---|
안드로이드 입력 키보드 hide/show (0) | 2019.01.15 |
안드로이드 KeyStore 비대칭(공개키, RSA) 암호화 (0) | 2018.12.28 |
유선 헤드셋(유선 이어폰)이 연결되어 있는지 체크 (0) | 2018.12.12 |
오디오 기능이 연결된 페어링 상태의 블루투스 기기가 있는지 체크 (0) | 2018.12.12 |