Tips/Android

[Android] 오디오 모드 변경 및 볼륨 조절

DevJaewoo 2022. 2. 7. 15:39
반응형

권한 설정

소리 설정을 변경하기 위해 Write Settings 권한이 필요하다.

 

AndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_SETTINGS" tools:ignore="ProtectedPermissions" />

 

Write Settings는 시스템 권한이라 앱 실행 시 자동으로 권한을 묻는 창이 뜨지 않기 때문에

설정 창을 띄워서 사용자가 직접 권한을 부여하도록 해야 한다.

 

MainActivity.kt

private fun requestWriteSettingsPermission() {
    if(!Settings.System.canWrite(this)) {
        Toast.makeText(this, "알림음을 켜기 위해 권한 설정이 필요합니다.", Toast.LENGTH_SHORT).show()
        startActivity(Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS))
    }
}

 

 

코드를 실행시키면 아래와 같은 창이 자동으로 실행되는데, 사용자가 다운로드한 앱을 선택해 권한을 직접 부여해주면 된다.

 

권한 부여 설정 창


오디오 모드 읽기/쓰기 (소리/진동/무음)

AudioManager의 RingerMode를 변경하여 오디오 모드를 바꿀 수 있다.

RingerMode의 종류는 총 3가지가 있는데, 이 중 변경하고자 하는 모드를 ringerMode에 넣어주면 된다.

 

  • AudioManager.RINGER_MODE_NORMAL (소리)
  • AudioManager.RINGER_MODE_VIBRATE (진동)
  • AudioManager.RINGER_MODE_SILENT (무음)

 

val audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager

var currentRingerMode = audioManager.ringerMode //읽기
audioManager.ringerMode = AudioManager.RINGER_MODE_NORMAL //쓰기

볼륨 읽기/쓰기

스마트폰으로 볼륨 키를 누르면 알 수 있듯이 볼륨엔 4가지 모드가 있다.

각 모드 별로 최대 볼륨이 다르기 때문에 getStreamMaxVolume을 통한 비율로 조정해야 한다.

 

  • AudioManager.STREAM_RING
  • AudioManager.STREAM_MUSIC
  • AudioManager.STREAM_ALARM
  • AudioManager.STREAM_SYSTEM

 

currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_ALARM) //읽기

var percentageVolume = 60 //60%
audioManager.setStreamVolume(
    AudioManager.STREAM_ALARM,
    (audioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM) * (percentageVolume / 100.0)).toInt(),
    0) //쓰기
반응형