개발/Android

AudioManager 사용 시 java.lang.SecurityException: Not allowed to change Do Not Disturb state 에러

Ricetherapy 2021. 2. 9. 11:00

AudioManager.setStreamVolume() 메서드 사용시 위와 같은 에러가 발생했다.

 

단말이 방해금지모드일 때 앱에서 볼륨을 조절하려 하면 발생하는 에러인데 방해금지모드를 무시 할 수 있는 권한을 주어 해결할 수 있다.

 

Settings.Global.getInt(getContentResolver(), “zen_mode”);

Settings.Global.getInt(getContentResolver(), “zen_mode”);

를 통해 현재 상태를 확인 할 수 있으며 응답값은 다음과 같다.

0 방해금지모드 OFF
1 중요한 알림만 허용
2 모든 알람에 대해 무음 처리
3 경보만 허용

볼륨값을 설정하기 전 권한을 체크해 권한이 없다면 아래 코드처럼 사용자로부터 권한을 부여받아야 한다.

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && !notificationManager.isNotificationPolicyAccessGranted()) {
  startActivity(new Intent(Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS));
}else{
  ... [권한 있을 시 처리 로직] ...
}

추가로 AndroidManifast.xml에

Android.permission.ACCESS_NOTIFICATION_POLICY

<uses-permission android:name="Android.permission.ACCESS_NOTIFICATION_POLICY" />

퍼미션을 추가해 준다.

'개발 > Android' 카테고리의 다른 글

webview - window.open() 처리  (0) 2021.06.02