- 이전에 브로드 캐스트 리시버로 자정이 되면 위젯을 갱신하는 로직을 구현했었다. - 그런데 이때 예약을 위해 사용된 setExact()가 반드시 알람 권한을 획득해야만 하는 함수인데 사용자가 알람 권한을 허용하지 않고 앱을 사용하다 보면 위와 같은 Exception이 발생하는 것이다. - 사실 알람 설정 기능이 아니고, 이미 다른 영역에서 권한 처리를 받도록 구성되어 있으며, 해당 기능은 백그라운드에서도 동작해야하는 부분이라 알람 권한 없이도 기능이 동작하도록 구성했어야 한다. - 이를 위해 setAndAllowWhileIdle()을 사용했다. 권한 필요 없이 Doze에서도 울릴 수 있는 유일한 대안이다. - 하지만 setExact()와 다르게 정확한 시간을 보장하지는 않는다. 약 1~2분 정도 차이가..
permission
사용자가 프로필 사진을 변경하기 위해 갤러리에서 사진을 선택해 가져오는 로직이 노후화되어 전체적으로 재구성했다. registerForActivityResult를 활용했다. https://developer.android.com/training/basics/intents/result?hl=ko 활동에서 결과 가져오기 | Android 개발자 | Android Developers 활동에서 결과 가져오기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 앱 내에서든 다른 앱에서든 다른 활동을 시작하는 것은 단방향 작업이 아니어도 됩 developer.android.com 먼저 갤러리로 진입할 수 있는 로직을 작성한다. val permissions = if (Build.VERSION...

안드로이드에서는 위치, 외부 저장소 등의 접근을 위해 사용자에게 시스템 다이얼로그 직접 접근 권한 허가를 받아야 한다. 최근 Android 13부터는 알람까지 접근 권한을 받아야 활성화되는 것으로 변경되었다. 하지만 사용자들이 매번 허용한다고 보장할 수 없다.. 접근 권한 허가 요청을 2번 이상 거부 당하거나 과거 OS 버전처럼 다시 보지 않음을 체크하여 거부할 경우, 사용자가 특정 기능 사용을 영구적으로 제한받을 수 있다. 실제로 위와 같은 이유로 특정 기능이 안 된다는 사용자 리포트가 들어와 재설치를 안내하고, 권한 허가를 요청드린 경우가 있었는데, 이런 비용 낭비 시나리오를 대응하기 위해 영구적으로 권한 접근을 거절당하더라도 안내 Dialog를 통해 사용자가 직접 권한 설정을 변경할 수 있는 로직을..