Android 음악 프로 그래 밍:오디 오 초점 관리

Android 시스템 은 음악,경보,알림,전화 벨 소리,시스템 소리,호출(통화)음량,DTMF 음조(키보드 다이얼)를 재생 하기 위해 서로 독립 된 오디 오 유통 로 를 유지 합 니 다.이렇게 하 는 것 은 주로 사용자 가 모든 흐름 의 볼 륨 을 독립 적 으로 제어 할 수 있 도록 하기 위해 서 이다.
AD:
http://mobile.51cto.com/android-309321.htm
오디 오 스 트림 식별
우수한 오디 오 체험 을 만 드 는 첫 번 째 단 계 는 응용 프로그램 이 사용 할 오디 오 흐름 유형 을 알 아 보 는 것 입 니 다.
Android 시스템 은 음악,경보,알림,전화 벨 소리,시스템 소리,호출(통화)음량,DTMF 음조(키보드 다이얼)를 재생 하기 위해 서로 독립 된 오디 오 유통 로 를 유지 합 니 다.
이렇게 하 는 것 은 주로 사용자 가 모든 흐름 의 볼 륨 을 독립 적 으로 제어 할 수 있 도록 하기 위해 서 이다.
대부분의 흐름 은 시스템 이벤트 에 만 국한 되 기 때문에 프로그램 이 알 람 을 바 꾸 려 고 하지 않 는 한 거의 사용 할 수 있 습 니 다. STREAM_MUSIC 오디 오 스 트림.
하드웨어 볼 륨 버튼 을 사용 하여 프로그램의 볼 륨 을 제어 합 니 다.
기본적으로 볼 륨 키 를 누 르 면 현재 초점 을 맞 춘 오디 오 흐름 의 볼 륨 을 수정 합 니 다.프로그램 이 현재 음악 을 재생 하고 있 지 않 거나 실행 되 지 않 았 다 면 볼 륨 키 는 벨 의 볼 륨 을 조절 할 것 입 니 다.
만약 에 게임 이나 음악 프로그램 이 있다 면 사용자 가 볼 륨 키 를 눌 렀 을 때 그들 이 현재 노래 를 탐색 하고 있 거나 현재 음악 게임 의 위치 에 머 물 지 않 아 도 게임 이나 음악의 볼 륨 을 조절 하고 싶 습 니 다.
볼 륨 제어 키 의 버튼 메 시 지 를 받 아서 현재 오디 오 볼 륨 을 수정 할 수 있 습 니 다.하지만 그렇게 귀 찮 게 하지 마 세 요.안 드 로 이 드 는 이미 편 의 를 제 공 했 습 니 다. setVolumeControlStream() 방법 은 사용자 가 지정 한 오디 오 흐름 에 따라 자동 으로 볼 륨 을 조절 합 니 다.
먼저 프로그램 이 사용 할 오디 오 흐름 을 확인 한 다음 setVolumeControl Stream 방법 을 통 해 현재 초점 의 오디 오 흐름 으로 설정 합 니 다.
이 방법 은 반드시 일찍 호출 되 어야 하 며,생명주기 에 한 번 만 호출 하면 되 기 때문에 통상 적 으로 Activity 혹은 Fragment 의 OnCreate()내 호출.
이것 은 프로그램 이 보 이 는 상태 라면 볼 륨 제어 기능 은 사용자 가 원 하 는 효과(즉,현재 프로그램의 볼 륨 을 제어 하 는 것)를 확보 할 것 입 니 다.
코드 예제:

    
    
    
    
  1. setVolumeControlStream(AudioManager.STREAM_MUSIC);  

지금부터 장치 의 볼 륨 키 를 누 르 면 지정 한 오디 오 흐름 에 영향 을 줍 니 다.
하드웨어 재생 제어 버튼 을 사용 하여 프로그램의 오디 오 재생 을 제어 합 니 다.
많은 휴대 전화 와 많은 무선 이어폰 에는 재생,일시 정지,정지,건 너 뛰 기 등 미디어 재생 제어 버튼 이 첨부 되 어 있다.사용자 가 이 하드웨어 키 를 누 를 때마다 시스템 은 방송 된다. ACTION_MEDIA_BUTTON  동작
미디어 단추 의 클릭 이벤트 에 응답 하기 위해 서 는 등록 이 필요 합 니 다. BroadcastReceiver 방송 을 감청 하 러 왔 습 니 다.
코드 예제:

    
    
    
    
  1. <receiver android:name=".RemoteControlReceiver"> 
  2.   <intent-filter> 
  3.      <action android:name="android.intent.action.MEDIA_BUTTON"   /> 
  4.   </intent-filter> 
  5. </receiver> 

Receiver 에 서 는 어떤 키 를 눌 렀 는 지 구체 적 인 정 보 를 알 아야 합 니 다.Intent. 포함 하 다 EXTRA_KEY_EVENT 키,그것 을 통 해 KeyEvent 를 얻 을 수 있 습 니 다. 유형의 값,KeyEvent 의 KEYCODEMEDIA_*정적 상수 는 모든 미디어 단추 형식 을 표시 합 니 다.예 를 들 어 KEYCODE_MEDIA_PLAY_PAUSE 화해시키다 KEYCODE_MEDIA_NEXT 잠깐 만.
코드 예제:

    
    
    
    
  1. public class RemoteControlReceiver extends BroadcastReceiver { 
  2.   @Override 
  3.   public void onReceive(Context context, Intent intent) { 
  4.     if (Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())) { 
  5.       KeyEvent event = (KeyEvent)intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); 
  6.       if (KeyEvent.KEYCODE_MEDIA_PLAY == event.getKeyCode()) { 
  7.         // Handle key press. 
  8.         //   
  9.       } 
  10.    } 
  11.  } 

여러 프로그램 이 미디어 버튼 메 시 지 를 받 고 응답 할 수 있 기 때문에 프로그램 이 언제 미디어 단추 이 벤트 를 받 아들 여야 하 는 지 프로 그래 밍 방식 으로 제어 해 야 합 니 다.
응용 프로그램 에서 사용 할 수 있 습 니 다. 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

좋은 웹페이지 즐겨찾기