Android 음악 프로 그래 밍:오디 오 초점 관리
AD:
http://mobile.51cto.com/android-309321.htm
오디 오 스 트림 식별
우수한 오디 오 체험 을 만 드 는 첫 번 째 단 계 는 응용 프로그램 이 사용 할 오디 오 흐름 유형 을 알 아 보 는 것 입 니 다.
Android 시스템 은 음악,경보,알림,전화 벨 소리,시스템 소리,호출(통화)음량,DTMF 음조(키보드 다이얼)를 재생 하기 위해 서로 독립 된 오디 오 유통 로 를 유지 합 니 다.
이렇게 하 는 것 은 주로 사용자 가 모든 흐름 의 볼 륨 을 독립 적 으로 제어 할 수 있 도록 하기 위해 서 이다.
대부분의 흐름 은 시스템 이벤트 에 만 국한 되 기 때문에 프로그램 이 알 람 을 바 꾸 려 고 하지 않 는 한 거의 사용 할 수 있 습 니 다. STREAM_MUSIC 오디 오 스 트림.
하드웨어 볼 륨 버튼 을 사용 하여 프로그램의 볼 륨 을 제어 합 니 다.
기본적으로 볼 륨 키 를 누 르 면 현재 초점 을 맞 춘 오디 오 흐름 의 볼 륨 을 수정 합 니 다.프로그램 이 현재 음악 을 재생 하고 있 지 않 거나 실행 되 지 않 았 다 면 볼 륨 키 는 벨 의 볼 륨 을 조절 할 것 입 니 다.
만약 에 게임 이나 음악 프로그램 이 있다 면 사용자 가 볼 륨 키 를 눌 렀 을 때 그들 이 현재 노래 를 탐색 하고 있 거나 현재 음악 게임 의 위치 에 머 물 지 않 아 도 게임 이나 음악의 볼 륨 을 조절 하고 싶 습 니 다.
볼 륨 제어 키 의 버튼 메 시 지 를 받 아서 현재 오디 오 볼 륨 을 수정 할 수 있 습 니 다.하지만 그렇게 귀 찮 게 하지 마 세 요.안 드 로 이 드 는 이미 편 의 를 제 공 했 습 니 다. setVolumeControlStream() 방법 은 사용자 가 지정 한 오디 오 흐름 에 따라 자동 으로 볼 륨 을 조절 합 니 다.
먼저 프로그램 이 사용 할 오디 오 흐름 을 확인 한 다음 setVolumeControl Stream 방법 을 통 해 현재 초점 의 오디 오 흐름 으로 설정 합 니 다.
이 방법 은 반드시 일찍 호출 되 어야 하 며,생명주기 에 한 번 만 호출 하면 되 기 때문에 통상 적 으로 Activity 혹은 Fragment 의 OnCreate()내 호출.
이것 은 프로그램 이 보 이 는 상태 라면 볼 륨 제어 기능 은 사용자 가 원 하 는 효과(즉,현재 프로그램의 볼 륨 을 제어 하 는 것)를 확보 할 것 입 니 다.
코드 예제:
- setVolumeControlStream(AudioManager.STREAM_MUSIC);
지금부터 장치 의 볼 륨 키 를 누 르 면 지정 한 오디 오 흐름 에 영향 을 줍 니 다.
하드웨어 재생 제어 버튼 을 사용 하여 프로그램의 오디 오 재생 을 제어 합 니 다.
많은 휴대 전화 와 많은 무선 이어폰 에는 재생,일시 정지,정지,건 너 뛰 기 등 미디어 재생 제어 버튼 이 첨부 되 어 있다.사용자 가 이 하드웨어 키 를 누 를 때마다 시스템 은 방송 된다. ACTION_MEDIA_BUTTON 동작
미디어 단추 의 클릭 이벤트 에 응답 하기 위해 서 는 등록 이 필요 합 니 다. BroadcastReceiver 방송 을 감청 하 러 왔 습 니 다.
코드 예제:
- <receiver android:name=".RemoteControlReceiver">
- <intent-filter>
- <action android:name="android.intent.action.MEDIA_BUTTON" />
- </intent-filter>
- </receiver>
Receiver 에 서 는 어떤 키 를 눌 렀 는 지 구체 적 인 정 보 를 알 아야 합 니 다.Intent. 포함 하 다 EXTRA_KEY_EVENT 키,그것 을 통 해 KeyEvent 를 얻 을 수 있 습 니 다. 유형의 값,KeyEvent 의 KEYCODEMEDIA_*정적 상수 는 모든 미디어 단추 형식 을 표시 합 니 다.예 를 들 어 KEYCODE_MEDIA_PLAY_PAUSE 화해시키다 KEYCODE_MEDIA_NEXT 잠깐 만.
코드 예제:
- public class RemoteControlReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) {
- KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
- if (KeyEvent.KEYCODE_MEDIA_PLAY == event.getKeyCode()) {
- // Handle key press.
- //
- }
- }
- }
- }
여러 프로그램 이 미디어 버튼 메 시 지 를 받 고 응답 할 수 있 기 때문에 프로그램 이 언제 미디어 단추 이 벤트 를 받 아들 여야 하 는 지 프로 그래 밍 방식 으로 제어 해 야 합 니 다.
응용 프로그램 에서 사용 할 수 있 습 니 다. AudioManager 등록 및 취소 미디어 단추 의 이벤트 수신 기,등록 시 전용 이벤트 수신 기 를 사용 합 니 다.
예제 코드:
AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE);
...
// Start listening for button presses
am.registerMediaButtonEventReceiver(RemoteControlReceiver);
...
// Stop listening for button presses
am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);
일반적으로 프로그램 이 초점 을 잃 거나 화면 에 표시 되 지 않 고 배경 에 숨 어 있 을 때 대부분의 수신 기 를 취소 해 야 합 니 다(예: onStop() 리 턴 함수 중).
그러나 미디어 재생 프로그램 은 이렇게 간단 하지 않 습 니 다.사실 가장 중요 한 것 은 프로그램 이 보이 지 않 는 상태 일 때 화면 에 있 는 UI 로 제어 할 수 없 지만 미디어 재생 제어 버튼 에 응답 해 야 합 니 다(가장 전형 적 인 것 은 배경 에서 음악 을 재생 하 는 것 입 니 다).
따라서 더 좋 은 방법 은 프로그램 이 오디 오 초점 을 얻 거나 잃 었 을 때 각각 미디어 단 추 를 등록 하고 취소 하 는 이벤트 수신 기 입 니 다.프로그램의 인터페이스 상태 에 만 의존 하 는 것 이 아 닙 니 다.
구체 적 인 방안 은 다음 과정 을 참고 하 세 요.
참고 다이제스트:
https://developer.android.com/training/managing-audio/volume-playback.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
HDOJ/HDU 1113 Word Amalgamation (사전 순서 ~ 지도)a dictionary, which consists of at least one and at most 100 words, one per line; a line containing XXXXXX, which signal...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.