0

Как я могу узнать, является ли действие вершиной стека? Я думал об использовании onResume/onPause, но это не совсем так, как если бы это произошло после того, как приложение перейдет на задний план. Дело в том, что я отправляю широковещательный приемник, который получен для всех видов деятельности (у меня есть BaseActivity, который расширяется всеми действиями и регистрируется для трансляции). Таким образом, только активность, которая находится в верхней части стека, должна реагировать на трансляцию. Если я использую isResumed(), он будет работать всегда, но когда приложение перейдет в фоновый режим. Есть идеи?Как узнать, находится ли активность в верхней части стека

Заранее благодарен!

+1

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

+0

Благодарим Вас за ответ, но это именно то, что я сказал, что делаю. Проблема в том, что это решение не совсем правильно, если приложение переходит в фоновый режим, тогда никакая активность не возобновляется, поэтому никакая активность не обрабатывает широковещательный приемник. – FVod

ответ

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

Все созданные действия получают широковещательный приемник, так как регистр выполняется onCreate and unregistered on onDestroy. Но мне нужно определить, какая из них самая высокая, поэтому только один обрабатывает приемник. Я решаю эту проблему с помощью метода onResume/onPause, но, как я уже сказал, это не совсем правильно, так как когда приложение переходит в фоновый режим, никакая активность не обрабатывает приемник. – FVod

+0

зарегистрироваться в oncreate of baseActivity и отменить регистрацию в ondestroy или onpause в baseActivity. wait Я посылаю вам образец надежды, который поможет вам –

+0

Большое спасибо за пример, проблема в том, что когда приложение переходит в фоновый режим, действие приостанавливается, поэтому приемник вещания никогда не принимается – FVod

Смежные вопросы