본문 바로가기
[개발 일지]

당신이 잠든 사이에 2023.09.15 업데이트 개선 일지

by Hevton 2023. 9. 15.
반응형

 

패키지가 replace 되었을 때, 기존에 등록되어있던 알람을 취소하는 과정으로,

동일한 PendingIntent를 들고와서 취소하는 방법을 사용했었다.

 

근데 프로젝트 내에서 Android JetPack Navigation을 사용할 경우엔, nav_graph가 수정되기 때문에

navDeepLinkBuilder() 함수를 통해 PendingIntent를 만들 때, 동일한 nav_graph로 인식하지 못하는 오류가 있다.

navDeepLinkBuilder를 이용할 때에는 PendingIntent.getActivity() 같은 함수처럼 정수 값을 통해 유니크한 값을 지정해 줄 수 없기 때문에 불편하다.

 

따라서

alarmManager.cancel(alarmManager.nextAlarmClock.showIntent)

이를 활용하면 기존에 등록되어있는 알람을 취소할 수 있다.

 

주의해야 할 점은 AlarmManager의 구현체는 아직도 Java 언어이고

nextAlarmClock은 not null을 리턴한다고 명시되어 있지만, null을 리턴할 가능성이 있다.

즉 null safty 하지 못하다.

 

따라서 Exception이 발생할 수 있고, 직접 겪어보았다.

등록되어있는 알람이 없을 경우엔 Exception이 발생하게 된다.

 

따라서 이를 해결하려면

alarmManager.nextAlarmClock?.showIntent?.let { alarmManager.cancel(it) }

이렇게 작성해주면 된다.

반응형