현재 프로젝트에는 사운드를 다뤄야 할 일이 굉장히 많다. 그래서 이 AudioAttribute와 접할 일이 많다. 

 

먼저 공식 문서의 정의를 봐보자 (https://source.android.com/docs/core/audio/attributes)

 

Audio players support attributes that define how the audio system handles routing, volume, and focus decisions for the specified source. 

 

대충 해석을 해보면 AudioAttribute는 볼륨, 포커스 결정, 라우팅 (아마 출력 경로를 의미하는게 아닌가 싶다. 이어폰, 스피커 등등 .. ) 등을 지정하는데 쓰이는 속성 값이라고 보면 될 듯 하다. 

 

 

 

AudioAttribute가 어떤 값들을 가지고 있는지 자세히 알아보자. 공식문서에서 관련된 것들을 가져왔다. 

안드로이드는 개발자가 설정한 이러한 값들을 기반으로 어떤 식으로 사운드 처리를 해야하는지 판단하는 듯 하다. 

 

다음은 Usage에 관련한 프로퍼티다 

 

  • USAGE_UNKNOWN 
  • USAGE_MEDIA 
  • USAGE_VOICE_COMMUNICATION 
  • USAGE_VOICE_COMMUNICATION_SIGNALLING 
  • USAGE_ALARM
  • USAGE_NOTIFICATION 
  • USAGE_NOTIFICATION_TELEPHONY_RINGTONE --> 
  • USAGE_NOTIFICATION_COMMUNICATION_REQUEST
  • USAGE_NOTIFICATION_COMMUNICATION_INSTANT
  • USAGE_NOTIFICATION_COMMUNICATION_DELAYED
  • USAGE_NOTIFICATION_EVENT
  • USAGE_ASSISTANCE_ACCESSIBILITY
  • USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
  • USAGE_ASSISTANCE_SONIFICATION
  • USAGE_GAME
  • USAGE_VIRTUAL_SOURCE
  • USAGE_ASSISTANT

 

그리고 다음은 Content Type에 관련한 것들이다. 

 

  • CONTENT_TYPE_UNKNOWN(기본)
  • CONTENT_TYPE_MOVIE
  • CONTENT_TYPE_MUSIC
  • CONTENT_TYPE_SONIFICATION
  • CONTENT_TYPE_SPEECH

 

실제 Attribute는 다음과 같이 만들어서 쓰면 된다. 음악을 재생하는 경우를 코드로 짜 보았다. 

 

usage = AudioAttributes.USAGE_MEDIA;
cType = AudioAttributes.CONTENT_TYPE_MUSIC;

AudioAttributes attr = new AudioAttributes.Builder()
    .setUsage(usage)
    .setContentType(cType)
    .build();

'Android' 카테고리의 다른 글

Android 퍼미션 CHANGE_CONFIGURATION  (0) 2023.10.11
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"></uses-permission>

 

구글링을 해보면 " Configuration 관련 권한 " 이란 말 외엔 나와있지 않다. 

그렇다면 Configuration 권한이 무슨 말일까? 

 

 

공식 문서를 보면 다음과 같이 나와있다. 즉 이런 권한들을 바꾸는데 필요한 퍼미션이 아닌가 추측해본다.

https://developer.android.com/guide/topics/resources/runtime-changes?hl=ko 

 

구성 변경 처리  |  Android 개발자  |  Android Developers

Android 앱에서 구성 변경을 처리하세요.

developer.android.com

 

나같은 경우 언어 변경시 자꾸 Service가 죽고 다시 시작해버리는 문제였는데 공식문서에서 다음 구절을 확인해볼 수 있다. 저기선 Activity를 다시 만든다고 되어있는데 서비스도 같이 다시 시작해버리는걸까? 

 

 

아무튼 퍼미션을 매니페스트에 추가해주고 Service 태그에 적절한 configChanges를 설정해주니 더 이상 언어 변경으로 인해 서비스가 죽는 문제는 생기지 않았다. 

'Android' 카테고리의 다른 글

Android AudioAttribute  (0) 2023.10.12

+ Recent posts