2014-03-14 7 views
0

У меня есть 2 действия, назовите их A и B. Оба расширения: ServiceHelperAbstractActivity, у которого есть BroadcastReceiver, чтобы получать сообщения от Сервиса. Все отлично работает, когда я запускаю и даже тогда, когда я запускаю B, но если я стараюсь, чтобы перейти к от А до Б в А, BroadcastReceiver по-прежнему зарегистрирован в B.Неверный BroadcastReceiver получает сообщение

public ServiceHelperAbstractBase(ServiceHelperListener listener, 
     Context context) { 

    mListener = listener; 
    mContext = context; 
} 

public BroadcastReceiver mReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     String uuidString = intent 
       .getStringExtra(ServiceHelper.KEY_INTENT_UUID); 

     if (uuidString != null) { 
      UUID uuid = UUID.fromString(uuidString); 
      processRequestWithUuid(uuid); 
     } 

     mListener.onRequestDoneProcessing(); 
    } 


}; 

protected void onPause() { 
    ServiceHelper.disconnectReceiver(mContext, mReceiver); 
} 

protected void onResume() { 

    if (this.mRequestDataMap == null) { 
     this.mRequestDataMap = new HashMap<UUID, ServiceHelper.RequestData>(); 
    } 

    List<UUID> toCall = new ArrayList<UUID>(); 

    for (UUID uuid : this.mRequestDataMap.keySet()) { 
     toCall.add(uuid); 
    } 

    for (UUID uuid : toCall) { 
     processRequestWithUuid(uuid); 
    } 

    ServiceHelper.connectReceiver(mContext, mReceiver); 
}; 

Любая помощь будет принята с благодарностью.

ответ

0

Создать функцию, регистр широковещательный приемник и разрегистрировать/зарегистрировать его на Pause/методы Резюме:

//BroadCastReciever variable in base activity or activity 
private BroadcastReceiver serviceBroadcastReceiver;   

void registerBroadcastReceiver(){ 
if (serviceBroadcastReceiver != null) 
{ 

     LocalBroadcastManager.getInstance(this.getActivity()).unregisterReceiver(this.serviceBroadcastReceiver); 
      LocalBroadcastManager.getInstance(this.getActivity()).registerReceiver(this.serviceBroadcastReceiver, new IntentFilter("...BROADCAST_STR")); 
      return; 
     } 
     this.serviceBroadcastReceiver = new BroadcastReceiver() 
     { 
      public void onReceive(Context paramAnonymousContext, Intent paramAnonymousIntent) 
      { 
       //Recieve STH 
      } 
     }; 
     LocalBroadcastManager.getInstance(this.getActivity()).registerReceiver(this.serviceBroadcastReceiver, new IntentFilter("...BROADCAST_STR")); 
    }  //Then onResume & onPause methods in activity 
    @Override 
    public void onResume() { 
     super.onResume(); 
     registerBroadcastReceiver(); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(this.serviceBroadcastReceiver); 
    } 
Смежные вопросы