안드로이드/Java

[안드로이드][Java] 알림(Notification) 모드 변경

sinw212 2023. 2. 22. 16:39

AudioManager를 활용하여 알림(Notification)의 모드 변경

AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
if(mAudioManager.getRingerMode() == 0) {
	//AudioManager.RINGER_MODE_SILENT (무음모드인 경우)
} else if(mAudioManager.getRingerMode() == 1) {
	//AudioManager.RINGER_MODE_VIBRATE (진동모드인 경우)
} else if(mAudioManager.getRingerMode() == 2) {
	//AudioManager.RINGER_MODE_NORMAL (벨 모드인 경우)
} else {
	//AudioManager.ACTION_AUDIO_DECOMING_NOISTY (이어잭을 꼽고 있다고 뺀 경우)
}

//위 코드를 통해 현재 모드 상태 확인 후, 알림 모드 변경 가능
mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); //벨 모드로 변경

 

주의) 위 코드 실행 중, SILENT에서 변경 시 java.lang.SecurityException: Not allowed to change Do Not Disturb state 오류 발생 > 방해금지모드 권한 설정 필요

 

해결방법) 방해금지 모드 켜져있는지 여부 확인 후, 방해금지권한 설정 페이지로 이동

//방해금지모드 켜져있는지 여부 확인하는 코드
int zenModeValue = 0;

try {
    zenModeValue = Settings.Global.getInt(getContentResolver(), "zen_mode");
    switch(zenModeValue) {
    	case 0: //방해금지모드 OFF
        	break;
        case 1: //방해금지모드 ON (중요 알림만 허용)
        	break;
        case 2: //방해금지모드 ON (완전 무음모드 처리)
        	break;
        case 3: //방해금지모드 ON (경보만 알림)
        	break;
        default;
        	break;
    }
} catch (Settings.SettingNotFoundException e) {
    zenModeValue = 0;
}
//방해금지 권한 설정 페이지로 이동하는 코드
NotificationManager mNotifyManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

if(Build.VERSION_SDK_INT >= Build.VERSION_CODES.M)
		&& !mNotifyManager.isNotificationPolicyAccessGranted()) {
    Toast.makeText(this, "방해금지 권한을 허용해주십시오.", Toast.LENGH_LONG).show();
    Intent intent = new Intnet(Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);
    startActivity(intent);
}