2014-04-15 3 views
0

BaseActivity, ActivityA, ActivityB ActivityA와 B가 BaseActivity를 확장하는 세 가지 활동이 있습니다. ActivityA와 B 모두에서 일부 의도를 처리하는 BroadcastReceiver가 있습니다. 현재 동일한 코드에서 처리되는 ActivityA와 B 모두에 동일한 의도가 있습니다. 이것은 DRY 원칙을 위반하기 때문에 ActivityA의 공통 인 텐트와 부모 클래스의 B (BaseActivity)를 처리하려고합니다. 그렇게 할 수 있습니까?부모로부터 BroadcastReceiver 상속 Activity

다음은 코드입니다. ACCOUNT_UPDATE 및 JOURNAL_UPDATE 인 텐트는 클래스에 고유하지만 인 텐트 LOGIN_SUCCESS는 ActivityA 및 B에서 동일합니다.

public abstract class BaseActivity extends RoboActivity implements Handler.Callback { 

} 


public class ActivityA extends BaseActivity { 

    private final BroadcastReceiver intentReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(Constants.INTENTS.ACCOUNT_UPDATE)) { 
      updateGUI(); 
     } 

     if (intent.getAction().equals(Constants.INTENTS.LOGIN_SUCCESS)) { 
      updateGUI(); 
     } 
    }; 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     // Register which actions to listen to 
     IntentFilter intentFilter = new IntentFilter(Constants.INTENTS.ACCOUNT_UPDATE); 
     intentFilter.addAction(Constants.INTENTS.LOGIN_SUCCESS); 
     LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(intentReceiver, intentFilter); 
    } 
} 

public class ActivityB extends BaseActivity { 

    private final BroadcastReceiver intentReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      if(intent.getAction().equals(Constants.INTENTS.JOURNAL_UPDATE)){ 
      updateGUI(); 
     } 

     if (intent.getAction().equals(Constants.INTENTS.LOGIN_SUCCESS)) { 
      updateGUI(); 
     } 
     } 
    }; 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     // Register which actions to listen to 
     IntentFilter intentFilter = new IntentFilter(Constants.INTENTS.JOURNAL_UPDATE); 
     intentFilter.addAction(Constants.INTENTS.LOGIN_SUCCESS); 
     LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(intentReceiver, intentFilter); 
    } 
} 

답변

0

다음 링크의 보안 섹션을 읽어보십시오. 나는 이것이 당신이 찾고있는 것이라고 생각합니다. http://developer.android.com/reference/android/content/BroadcastReceiver.html

+0

이것이 내 문제와 관련된 이유는 아닙니다. 당신이 그것을 자세히 설명해 주시겠습니까? – v4r

+0

@ v4r - 두 개의 브로드 캐스트 리시버가 동일한 브로드 캐스트를 수신하면 우선 순위를 사용하여 어떤 리시버가 먼저 처리하는지 확인할 수 있습니다. – upenpat

+0

보안 섹션에서는 앱 간 보안에 대해 설명합니다. 필자의 경우 메시지는 동일한 응용 프로그램에서 보내지 만 다른 활동을합니다. – v4r

관련 문제