0

Comment savoir si une activité est en haut de la pile? J'ai pensé à utiliser onResume/onPause, mais ce n'est pas exactement, car cela échouerait une fois que l'application serait en arrière-plan. Le fait est que j'envoie un récepteur de diffusion qui est reçu pour toutes les activités (j'ai une BaseActivity qui est étendue par toutes les activités et qui s'enregistre à la diffusion). Ainsi, seule l'activité située en haut de la pile doit réagir à la diffusion. Si j'utilise le isResumed() alors cela fonctionnerait toujours mais quand l'application irait en arrière-plan. Une idée?Comment savoir si l'activité est en haut de la pile

Merci d'avance!

+1

http://stackoverflow.com/questions/3262157/how-to-check-if-my-activity-is-the-current-activity-running-in-the-screen – sasikumar

+0

Merci pour votre répondre, mais c'est exactement ce que j'ai dit que je fais. Le problème est que cette solution n'est pas totalement correcte, si l'application passe en arrière-plan, aucune activité n'est reprise, donc aucune activité ne gère le récepteur de diffusion. – FVod

Répondre

0
 in base activity you register the broadcast Receiver and in receiver function you call one abstract function which one is implemented by all child activities. 
     The activity which is on top will automatically receive that function call. 
     Edit sample code: 

     public abstract class BaseActivity extends AppCompatActivity { 
      private static final String NOTIFICATION_ARRIVED = "arrived"; 
      public abstract void receivedFunction(Intent intent); 
      private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
       @Override 
       public void onReceive(Context context, Intent intent) { 
        displayToast(" received in Base"); 
        receivedFunction(intent); 
       } 
      }; 

      public void displayToast(String s) { 
       Toast.makeText(this,s,Toast.LENGTH_SHORT).show(); 
      } 

      @Override 
      public void onResume() { 
       super.onResume(); 
       registerReceiver(mMessageReceiver, new IntentFilter(BaseActivity.NOTIFICATION_ARRIVED)); 
      } 

      @Override 
      public void onPause() { 
       super.onPause(); 
       unregisterReceiver(mMessageReceiver); 
      } 
     } 

     public class MainActivity extends BaseActivity { 
     @Override 
      public void receivedFunction(Intent intent) { 
       displayToast(" received in child"); 
      } 
     // do whetever you want . if you ovveride onpause and onResume then call super as well 
     } 
    or any other child 

    public class MainActivity2 extends BaseActivity { 
     @Override 
      public void receivedFunction(Intent intent) { 
       displayToast(" received in child"); 
      } 
     // do whetever you want . if you ovveride onpause and onResume then call super as well 
     } 

// to broadcast 

Intent intent = new Intent(BaseActivity.NOTIFICATION_ARRIVED); 
     sendBroadcast(intent); 
+0

Toutes les activités créées reçoivent la diffusion Receiver, car le registre est fait surCreate et non enregistré sur onDestroy. Mais j'ai besoin de détecter quelle est l'activité la plus importante, donc seulement celle-ci gère le récepteur. Je suis en train de résoudre ce problème en utilisant la méthode onResume/onPause mais, comme je l'ai dit, ce n'est pas tout à fait correct, car lorsque l'application passe en arrière-plan, aucune activité ne gère le récepteur. – FVod

+0

registre dans oncreate de baseActivity et désinscrit dans ondestroy ou onpause dans baseActivity. Attendez je vous envoie un échantillon d'espoir qui vous aidera –

+0

Merci beaucoup pour l'exemple, le problème est que lorsque l'application passe à l'arrière-plan, l'activité est en pause, donc le récepteur de diffusion n'est jamais reçu – FVod