권한 설정을 변경 한 이후 재시작시 onCreate가 동작하는 문제(SCHEDULE_EXACT_ALARM 관련)

꾸안드·2023년 6월 27일
0
post-thumbnail
> 안드로이드 12이상부터 알람매니저를 사용하기 위해서는 **android.permission.SCHEDULE_EXACT_ALARM**을 사용하여 매니저에 등록할 수 있다. 이슈를 수정하는 과정에서 **알람 및 리마인더 설정 허용** 이라는것을 보게 되었는데, 해당 권한이 없으면 알람 매니저를 통해 셋팅하는 과정에서 앱이 죽어버리는 현상과 UI에 설정된 값이 리셋되는 현상이 나타나서 어떤식으로 해결 했는지 적어본다.

Manifest 앱 권한 추가

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

알람 매니저를 동작하는 위치에서 권한을 확인

private boolean checkAlarmRemainderPermission() {
        boolean result = false;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
            AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

            if (alarmManager.canScheduleExactAlarms()) { // 권한이 있다면 true를 반환합니다.
                result = true;
            }
        } else { // 나머지 버전은 해당사항 없습니다.
            result = true;
        }
        
        return result;
    }

권한이 없을 경우 알람 및 리마인더 설정으로 이동

private void showSettingAlarmReminder() {
	Intent appDetail = new Intent(Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM, Uri.parse("package:" + getPackageName()));
                    appDetail.addCategory(Intent.CATEGORY_DEFAULT);
                    appDetail.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(appDetail);
}

적용된 결과


여기서 발생한 문제점

위에 그림처럼 권한을 허용해준 상태에서 앱 재진입시 스케줄 등록은 문제없이 동작한다. 하지만 사용자가 앱 설정에서 알람 및 리마인더 설정 허용을 중지할 수 있다. (물론 그렇게까지 하는분이...) 사용자가 중지를 했다는 가정을 하고 앱 재진입시 lifeCycle이 정상적으로 동작하지 않고 UI에 셋팅되어 있던 값들도 함께 날아가는 문제를 찾았다.

LifeCycle 문제

  1. LifeCycle은 onResume -> onPasue -> onStop -> (onDestroy 동작X) -> onCreate -> ...
  2. stackoverflow에서 오래된 글이지만 원인을 알 수 있는 상황을 발견함.
  3. Bundle을 통해 해결 가능하였음.
  4. 필자는 해당 화면에서 API 재호출을 통해 해결함.

참고사항

  1. Android12(S)알람매니저 등록 오류
  2. onCreate() gets called when reopen from recent task after permission settings is changed

문제가 있을 경우 언제든 연락주시면 수정하겠습니다.
profile
꾸준하게 안드로이드 개발

0개의 댓글