4개 컴포넌트 중 api적으로 가장 간단한 컴포넌트!
이벤트 모델로 실행되는 컴포넌트 (유저 이벤트는 아니고, 시스템의 특정 상황을 의미함)
개발자 코드에 의해 라이프사이클을 직접 관리할 수는 없고, 시스템이 관리함
broadcast receiver를 상속받아서 class 정의,
시스템에서 객체를 생성하고 onReceiver이 자동 호출
컴포넌트기에 메니페스트에 등록해야함! (reveiver 태그로 등록, name 속성 생략 불가 -> 시스템 인지 완료!)
- 코드에서 동적으로 등록하는 것도 가능, registerReceiver - 언제 실행되어야 하는지를 intentFilter로 정의하여 선언
-> 브로드캐스트 리시버가 항상 필요한 건 아니고, 필요한 시점에서만 실행되려면 동적 등록! (정적 등록은 인텐트 발생 시 항상 실행되기에)
unregisterReceiver() 를 통해 등록해제 (코드에서 등록했으면 코드에서 등록해제~!)
val intent = Intent(this, MyReveiver::class.jave)
sendBroadcast(intent)
-> 브로드캐스트를 발생시키는 인텐트를 시스템에 발생시킴!
인텐트가 발생했을 때 인텐트에 의해 실행될 컴포넌트가 없는 경우,
액티비티는 에러를 발생시키지만
브로드캐스트는 에러를 발생시키지 않는다!
인텐트가 발생했을 때 인텐트에 의해 실행될 컴포넌트가 많은 경우,
액티비티는 선택할 수 있게 하지만
브로드캐스트는 모두가 한번에 실행이 된다! 오~~
user-permission에 REVEIVE_BOOT_COMPLETED를 받고, receiver를 manifest에서 선언할 때 intent-filter에 BOOT_COMPLETED를 함께 넣어주면 됨! (암시적 인텐트로)
화면이 꺼졌을 때 특정 액티비티가 계속 움직일 필요가 없는 경우
리시버는 무조건 동적 등록해야만 실행!시스템 인텐트 정보에 맞춰서 등록
+배터리 관련 액션 문자열
BATTERY_LOW 배터리 낮은 상태
BATTERY_OKAY 배터리 정상 상태
BATTERY_CHANGED 충전 상태 변경
ACTION_POWER_CONNECTED 충전중
ACTION_POWER_DISCONNECTED 충전 끊김
등등..