안드로이드 개발 팁 #68 - 타겟팅 버전 33 변경 후, 발생하는 SecurityException 해결 방법 (from registerReceiver)

타겟팅 버전 33 변경 후, 발생하는 SecurityException 해결 방법 (from registerReceiver)

No. 68
2024. 06. 14 (금) | Written by @dorian-mobileapp

시작하며...

현 직장에서 메인 앱의 타겟팅 버전을 32에서 33으로 올린 후, SecurityException 예외가 발생하는 문제가 있었습니다. 다행히 업데이트 버전 출시 후가 아닌 개발 중에 발견되었던 오류였습니다. 이거 수정하느라 계획했던 일정보다 시간이 좀 더 필요했죠. 오늘은 당시 있었던 이 문제를 복기하며, 내용을 정리해 보았습니다.


원인

타겟팅 버전 33 이상이면, Context 클래스의 registerReceiver(receiver, filter) 호출시 강제로 SecurityException 발생


해결 방법

registerReceiver(receiver, filter, flags) 메소드를 대신 호출하면 됩니다. flags 파라메터가 추가로 있다는 점이 차이점입니다.

flags 파라메터의 플래그 값 (Int 형)
  • RECEIVER_NOT_EXPORTED: 다른 앱으로부터 브로드 캐스트 받지 않음
  • RECEIVER_EXPORTED: 다른 앱으로부터 브로드캐스트 받음
  • RECEIVER_VISIBLE_TO_INSTANT_APPS
    • 인스턴트 앱으로부터 브로드캐스트 받음
    • RECEIVER_EXPORTED 플래그 설정한 조건에 추가로 설정 가능

또 다른 문제점

registerReceiver(receiver, filter, flags) 메소드는 Android 8.0(Oreo)(API level 26) 이상의 기기에서만 사용 가능합니다.

해결 방법

안드로이드 8.0 이상에서는 receiverRegister(register, intentFilter, flags)를, 8.0 미만에서는 registerReceiver(receiver, intentFilter)를 호출하면 됩니다.

if (Builder.VERSION.SDK_INT >= 26) {
    registerReceiver(receiver, intentFilter, flags)
}
else {
    registerReceiver(receiver, intentFilter)
}

참고 페이지


지난 안드로이드 개발 팁


Layout provided by Steemit Enhancer hommage by ayogom


Posted through the ECblog app (https://blog.etain.club)
Sort:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

안녕하세요.
SteemitKorea팀에서 제공하는 'steemit-enhancer'를 사용해 주셔서 감사합니다. 개선 사항이 있으면 언제나 저에게 연락을 주시면 되고, 관심이 있으신 분들은 https://cafe.naver.com/steemitkorea/425 에서 받아보실 수 있습니다. 사용시 @응원해 가 포함이 되며, 악용시에는 모든 서비스에서 제외될 수 있음을 알려드립니다.


안녕하세요.
이 글은 SteemitKorea팀(@ayogom)님께서 저자이신 @dorian-mobileapp님을 응원하는 글입니다.
소정의 보팅을 해드렸습니다 ^^ 항상 좋은글 부탁드립니다
SteemitKorea팀에서는 보다 즐거운 steemit 생활을 위해 노력하고 있습니다.
이 글은 다음날 다시 한번 포스팅을 통해 소개 될 예정입니다. 감사합니다!

Upvoted! Thank you for supporting witness @jswit.

Coin Marketplace

STEEM 0.17
TRX 0.13
JST 0.030
BTC 56577.01
ETH 2981.05
USDT 1.00
SBD 2.14