Nuke Olaf - Log Store

[Android] 안드로이드 - 브로드캐스트 리시버(broadcast receiver) 본문

Android

[Android] 안드로이드 - 브로드캐스트 리시버(broadcast receiver)

NukeOlaf 2019. 11. 24. 13:49

broadcast receiver

broadcast : 방송하다

receiver : 수신기, 무언가를 받는것

즉, 브로드캐스트 리시버란 방송하고 있는것을 받아내는 무언가라고 생각된다.

https://brunch.co.kr/@mystoryg/48

방송의 특징을 생각해 보자. 방송국은 불특정 다수에게 송신을 한다. 라디오 방송국은 전파를 이용해 방송을 송출할 뿐, 누가 방송을 듣는지 그런거는 잘 모른다. 방송국에서 보내는 전파를 수신할 수 있는 라디오를 갖고 있는 사람들만, 라디오를 이용해 방송을 듣는다. 라디오를 듣는 사람들은 자신이 원하는 시간에 라디오를 켠다. 그렇다고 라디오로 방송되고 있는 모든 방송을 수신하는 것은 아니다. 주파수(채널)를 설정해서 자신이 듣고싶은, 원하는 방송만 수신한다.

안드로이드시스템도 방송국과 비슷한 역할을 한다. 안드로이드 시스템은 단말기의 상태나 정보를 계속해서 방송한다. 배터리를 예로 들면, 배터리가 100%가 되면 안드로이드 시스템은 배터리가 100%라고 동네방네 방송한다. 배터리가 99%가 되어도 시스템은 배터리가 99%라고 동네방네 방송한다. 98%도, 97%도... 이런식으로 끊임없이... 브로드 캐스트 리시버는 이렇게 안드로이드 시스템이 방송하는(다른 어플리케이션이 방송하는 것도 수신할 수 있다) 방송 내용을 받아, 여러 현상에 대한 처리를 하는 역할을 한다. 예를 들면 배터리 상태가 15% 이하가 되면, 절전모드에 들어가는 처리를 하도록 할 수 있다. 브로드캐스트가 수많은 방송(브로드캐스트) 중에서 어떤것을 수신할 것인지 등록하는 과정도 필요하다. action 중 수신을 원하는 action을 IntentFilter를 통해 지정한다

IntentFilter filter = new IntentFilter();

filter.addAction(Intent.ACTION_BATTERY_CHANGED);

filter.addAction(Intent.ACTION_SCREEN_ON);

 

이제, ACTION_BATTERY_CHANGED와 ACTION_SCREEN_ON 두 가지 방송을 수신할 것이라고 지정했다.

이제, 수신할 방송을 받아올 장치가 필요하다. 브로드캐스트 리시버의 onReceive() 메서드를 통해서 가능하다.

이 메서드를 구현하지 않는다면, 비싼 돈주고 케이블 채널에 가입해 놓았는데 집에 TV가 없는 셈이다.

@Override

public void onReceive(Context context, Intent intent) {

if(intent.getAction().equals(Intent.ACTION_BATTERY_CHANGED)) {

Toast toast = Toast.makeText(context, "Battery status is changed.","Toast.LENGTH_LONG);

toast.show();

} else if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {

Toast toast = Toast.makeText(context,"Screen on.",Toast.LENGTH_LONG);

toast.show();

}

}

Comments