1

Я создал класс, который простирается от CountDownTimer. Он имеет способ onFinish(), который вызывает, когда истекает timer.Как закрыть все открытые действия и открыть новый из Java-класса

Есть 6 Деятельность, пользователь может быть в любом activity, когда истекает таймер, поэтому в CounterTimer когда Finish() вызовы методов, мне нужно, чтобы показать Alert Message пользователю, а мне нужно, чтобы перенаправить пользователя на Login странице.

Вещи запутывающие, поскольку я не могу позвонить Intent class в Normal Class, я также не могу передать context, так как пользователь может находиться в любом виде деятельности.

Я написал следующий код, но его не помогает.

Я использую контекст здесь, но дает сообщение об ошибке при переходе context к Intent

public class CounterClass extends CountDownTimer implements ITMServiceEvent { 

    @Override 
    public void onFinish() { 
     if(sql_code.equalsIgnoreCase("0")) { 
      String resultCode = command1.getString("result"); 
      context.startActivity(context.getApplicationContext(), MainActivity.class); 
      } 

Calling Таймер в начале мастера, в Fragment

CounterClass counterClass= new CounterClass(180000,1000); 
counterClass.setTextView(tvTimer); 
counterClass.start(); 
+1

проверить [это] (http://stackoverflow.com/a/6330456/5296734), это может вам помочь. –

+0

@ nick7291: Спасибо, позвольте мне попробовать это – Kirmani88

+0

Возможный дубликат [Завершить все предыдущие действия] (http://stackoverflow.com/questions/6330260/finish-all-previous-activities) – faranjit

ответ

1

Есть две части ваш вопрос, во-первых, как вы можете очистить стек активности и начать новый «Активность сверху», я полагаю, что это будет LoginActivity в вашем случае.

Чтобы сделать это, вам нужно установить флаг вашей LoginActivity Intent, когда вы хотите, чтобы запустить его,

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK); 

И вторая часть, вы хотите, чтобы иметь возможность закончить текущую активность после показа диалог с пользователем. Я предполагаю, что ваш Timer - это класс обслуживания, который работает в фоновом режиме. Способ рассказать о вашей текущей деятельности, что Время вверх! является отправкой широковещательного сообщения. Предпочтительно LocalBroadcastManager может помочь вам. У вас может быть класс BaseActivity, в котором все ваши действия могут быть продлено от него, и вы можете зарегистрировать/отменить регистрацию LocalBroadcastManager в/из этих видов деятельности в классе BaseActivity (зарегистрируйтесь в onResume и отмените регистрацию в). После их регистрации вам просто нужно реализовать и обработать метод onReceive, где вы можете отобразить диалог и запустить LoginActivity после окончания текущего.