본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[Android/안드로이드] Broadcast Receiver 에 대해 알아보자.

by 돼지왕 왕돼지 2012. 2. 18.
반응형


안녕하세요 돼지왕 왕돼지입니다.
오늘은 Broadcast Receiver 에 대해 간략하게 알아볼께요.


Broadcast Receiver 가 뭐야?

 
- 말 그대로 Broadcast, 방송을 듣는 녀석입니다.
  누군가가 Intent 로 메세지를 보낸다는 것에 대해 receiver 를 등록해 놓으면 이 receiver 로 메세지가 수신됩니다.
 
 

void onReceive (Context context, Intent intent)

  -> Broadcast가 수신되면 onReceive 메서드가 자동 호출됩니다.



!! BR은 메인 스레드에서 실행. 따라서 10초 이내로 return 해야 합니다. 
   아니면 system이 강제로 이 receiver를 죽이거나, ANR 이 발생합니다. !!
 
 

void sendBroadcast (Intent intent [, String receiverPermission])
void sendOrderedBroadcast (Intent intent, String receiverPermission)

  -> permission 필요 없을 경우 null 전달
  -> Broadcast 수신 순서는 android:priority 속성이 지정하는 중요도에 따라 수신 순서가 결정
 






예제코드를 줘봐요.

 
<Broadcast Sender>

Intent intent = new Intent();
intent.setAction( [Action Name] ); // Action name
sendBroadcast(intent);

 

<Broadcast Receiver>

public class BR_test extends BroadcastReceiver{
   public void onReceive (Context context, Intent intent){
      Intent intent2 = new Intent(context, .class);
      intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      context.startActivity(intent2);
   }
}

 

<Manifest> - BroadcastReceiver 도 component 중 하나로 반드시 Manifest 에 등록해야만 합니다.

<receiver android:name = "BR.class">
   <intent-filter>
      <action android:name="action"/>
   </intent-filter>
</receiver>

 
 
 



매니페스트가 아닌 코드로도 receiver 등록할 수 있다고 들었는데..

  

Intent registerReceiver (BroadcastReceiver receiver, IntentFilter filter)
void unregisterReceiver (BraodcastReceiver receiver)

 -> BR 등록 최적의 시점은 onResume이며 등록 해제할 최적 시점은 onPause() 이다.
 
 
<Broadcast Sender>

Intent intent = new Intent();
intent.setAction("exam.service.savezone");
sendBroadcast(intent);


<Broadcast Receiver>

public class OnSaveZone extends Activity{
   public void onResume(){
      super.onResume();
      IntentFilter filter = new IntentFilter();
      filter.addAction("exam.service.savezone");
      registerReceiver(mSaveZoneBR, filter);
   }
 
   public void onPause(){
      super.onPause();
      unregisterReceiver(mSaveZoneBR);
   }
 
   BroadcastReceiver mSaveZoneBR = new BroadcastReceiver(){
      public void onReceive(Context context, Intent intent){
         // To Do
      }
   }


 






반응형

댓글