Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- C
- 구글
- unity
- 개발
- centOS7
- 컴퓨터과학총론
- kakao
- 프래그먼트
- it
- 번역
- ubuntu
- android
- Portfolio
- C lanuage
- java
- error
- caddy
- MySQL
- php
- 개발자
- H2O
- techEmpower
- 자바
- 해석
- javascript
- server
- NGINX
- 한글
- 안드로이드
- mariadb
Archives
- Today
- Total
개발모음집
오디오 포커스(Audio Focus) - 내 앱에서 음악 재생시 다른 앱 정지시키기 본문
개념 설명 페이지에서 우선 오디오 포커스가 뭔지 알아보자.
(더 자세하고 문서화된 느낌의 페이지도 있다.)
개념적으로 중요한 부분만 발췌하자면
A 가 음악을 play 하려고 할 때 먼저 Audio Framework 로부터 Audio Focus 를 얻어옵니다 (Request AudioFocus- GAIN). 이때 Audio Framework 는 A 가 음악을 재생해도 되면 Audio Focus 를 A 에게 줍니다 (Grant AudioFocus). 그러다가 B 가 알람을 울릴려고 똑같은 방식으로 Audio Framework 에세 Audio Focus 를 요청합니다. 이때 Audio Framework 은 B 가 우선순위가 더 높다가 판단이 되면 B 에게 Audio Focus 를 주고 (이렇게 되면 A도 Audio Focus 를 갖고, B 도 갖고 있는 상황이 되기에), A 에게 너는 Audio Focus 를 잃었다는 (LOSS) 것을 알립니다.
AudioFocus에는 포커스를 얻는 상황과 잃는 상황이 있는데
각각 3가지 종류가 있다.
[GAIN]
AUDIOFOCUS_GAIN
AUDIOFOCUS_GAIN_TRANSIENT
AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK
[LOSS]
AUDIOFOCUS_LOSS
AUDIOFOCUS_LOSS_TRANSIENT
AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK\
이것에 대한 코드는 스택오버플로우에 써있다.
// 오디오 포커스
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int focusResult = am.requestAudioFocus(focusChangeListener,
AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN); // 이건 focusChangeListener를 보면 알 수 있다.
if (focusResult == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { // 오디오 써도 된다는 허락을 맡게 되면
재생 / 일시정지 코드
}
위코드는 클릭이벤트를 받거나 그럴 때 쓰는 거..
// 오디오 포커스
focusChangeListener =
new AudioManager.OnAudioFocusChangeListener() {
public void onAudioFocusChange(int focusChange) {
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):
mediaPlayer.pause();
break;
case (AudioManager.AUDIOFOCUS_LOSS):
mediaPlayer.stop();
break;
case (AudioManager.AUDIOFOCUS_GAIN):
// Return the volume to normal and resume if paused.
mediaPlayer.setVolume(1f, 1f);
mediaPlayer.start();
break;
default:
break;
}
}
};
'Android' 카테고리의 다른 글
페이스북, 카카오 등 커스텀 버튼 (0) | 2017.08.11 |
---|---|
DataOutputStream 과 FileInputStream (1) | 2017.08.10 |
안드로이드, 서버에 있는 이미지 쉽게 다운로드하기 AQUERY (0) | 2017.08.09 |
TarsosDSP - AudioDispatcher start() status -38 error (0) | 2017.08.08 |
fcm token 중복없이 저장하기 (0) | 2017.08.08 |