투케이2K

266. (TWOK/ERROR) [Android] needs to hold permission SCHEDULE_EXACT_ALARM or USE_EXACT_ALARM - 알람 권한 본문

투케이2K 에러관리

266. (TWOK/ERROR) [Android] needs to hold permission SCHEDULE_EXACT_ALARM or USE_EXACT_ALARM - 알람 권한

투케이2K 2024. 8. 22. 20:46

[환경 설정 및 설명]

프로그램 : AndroidStudio

설 명 : [Android] needs to hold permission SCHEDULE_EXACT_ALARM or USE_EXACT_ALARM - 알람 권한

 

[에러 원인]

1. MqttAndroidClient 라이브러리를 사용해 MQTT connect 및 subscribe 구독 수행 시 앱 사용 추가 권한이 필요해 발생하는 이슈

E/AndroidRuntime: FATAL EXCEPTION: MQTT Rec: paho573505452019
    Process: com.example.app, PID: 22951
    java.lang.SecurityException: Caller com.example.app needs to hold android.permission.SCHEDULE_EXACT_ALARM or android.permission.USE_EXACT_ALARM to set exact alarms.
        at android.os.Parcel.createExceptionOrNull(Parcel.java:3069)
        at android.os.Parcel.createException(Parcel.java:3053)
        at android.os.Parcel.readException(Parcel.java:3036)
        at android.os.Parcel.readException(Parcel.java:2978)
        at android.app.IAlarmManager$Stub$Proxy.set(IAlarmManager.java:347)

[해결 방법]

1. 안드로이드 14 기준 : AndroidManifest.xml 파일에 권한 추가 실시

              <!-- ============================================================= -->
              <!-- [MQTT 통신 사용 스케줄 및 알람 관리] -->
              <!-- ============================================================= -->
              <!-- [SCHEDULE_EXACT_ALARM : 안드로이드 12 이상 선언 필요] : [13 이상 alarmManager.canScheduleExactAlarms() 권한 부여 상태 체크 필요] -->
              <!-- ============================================================= -->
              <!-- [USE_EXACT_ALARM : 안드로이드 14 이상 선언 필요] -->
              <!-- ============================================================= -->
              <!-- [주의] : USE_EXACT_ALARM 권한은 캘린더 및 알람 시계 앱 목적으로 제작 된 앱이 사용할 수 있다 -->
              <!-- 참고 : 앱은 정책 언어 에 따라 적격을 갖추지 않는 한 매니페스트에서 이 권한이 있는 버전의 앱을 게시할 수 없습니다 -->
              <!-- ============================================================= -->
              <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
              <uses-permission android:name="android.permission.USE_EXACT_ALARM" />

2. MqttAndroidClient 라이브러리 MQTT Connection 및 subscribe 수행 시 사전) 안드로이드 13 이상 SCHEDULE_EXACT_ALARM 권한 부여 상태 확인

                // [OS 13 이상은 사전 부여 되지 않은 상태로 권한 부여 상태 체크 필요] >> [권한 미부여시 Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM 인텐트 이동]
                AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
                
                boolean isGrant = alarmManager.canScheduleExactAlarms();
 
 

 

반응형
Comments