2010-06-26 8 views
22

활동이 있으므로 브로드 캐스트 이벤트에 대한 응답이 필요합니다. 활동이 동시에 브로드 캐스트 리시버가 될 수 없기 때문에 브로드 캐스트 리시버를 만들었습니다.실행중인 활동을 브로드 캐스트 수신기에서 어떻게 알릴 수 있습니까?

제 질문은 : 방송 수신기에서 어떻게 활동을 알릴 수 있습니까? 저는 이것이 일반적인 상황이라고 생각합니다. 그래서 이것을위한 디자인 패턴이 있습니까?

답변

37

브로드 캐스트가 알림입니다. :) 당신이 말하기를 원한다면, 수신 된 방송을 기반으로 활동이나 서비스 등을 시작하십시오. 그러면 독립형 방송 수신기가 필요하며이를 매니페스트 파일에 넣으십시오. 그러나 활동 자체가 브로드 캐스트에 응답하기를 원하면 활동에 브로드 캐스트 리시버의 인스턴스를 작성하여 거기에 등록하십시오.

내가 사용하는 패턴은 다음과 같습니다 그래서

public class MyActivity extends Activity { 
    private BroadcastReceiver receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(...) { 
      ... 
     } 
    }); 

    public void onResume() { 
     super.onResume(); 

     IntentFilter filter = new IntentFilter(); 
     filter.addAction(BROADCAST_ACTION); 

     this.registerReceiver(this.receiver, filter); 
    } 

    public void onPause() { 
     super.onPause(); 

     this.unregisterReceiver(this.receiver); 
    } 
} 

, 클래스가 (도에서 onCreate에서 할 수있다)을 만들 때 수신기가 인스턴스화 이런 식으로. 그런 다음 onResume/onPause에서 수신기 등록 및 등록 취소를 처리합니다. 그런 다음 수신자의 onReceive 메소드에서 브로드 캐스트를 수신 할 때 원하는대로 반응하도록 필요한 모든 작업을 수행합니다.

+9

그래서 수신기 내부에서 수신기를 정의해야합니까? 앱 전체에서 동작을 원하면 어떻게해야할까요? – shim

+0

추가 설명 :'String BROADCAST_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";'또한 앱 전반에 걸쳐 동작을 원하지만'Application '을 확장하는 클래스에서 코드를 가져갈 수 없습니까? – Sunshinator

관련 문제