2010-12-11 10 views
11

Moja aplikacja to zegar z aplikacją typu alarmu. Po wygaśnięciu licznika czasu chcę przywrócić główną aktywność aplikacji do widoku, jeśli użytkownik odszedł, ale aplikacja jest nadal uruchomiona.Przynieś aplikację z powrotem na przód

pokażę gdzie chciałbym umieścić niezbędne kod:

public class MyCount extends CountDownTimer { 
     public MyCount(long millisInFuture, long countDownInterval) { 
      super(millisInFuture, countDownInterval); 
     } 

     public void onFinish() { 

     /** code here to bring the app back to the front/top of stack, in its current state */ 


     timeDisplay.setText("Expired.!"); 
     ReminderFlashingScreen.setVisibility(View.GONE); 
     statustab.setBackgroundResource(R.drawable.redtab); 
     seeker.setProgress(0); 
     reset.setBackgroundResource(R.drawable.resetbtnoff); 
     playExpiredAlarm(); 
     alarmAnimation.start(); 
     flasher.setVisibility(View.VISIBLE); 
     StopAlarmButtonAnimation.start(); 
     StopAlarmButton.setVisibility(View.VISIBLE); 
     expired = true; 
     } 

     public void onTick(long millisUntilFinished) { 
      remindertimepref = prefs.getString("reminderTime", "<unset>"); 
      remindtime = Integer.parseInt(remindertimepref.trim()); 
      timeDisplay.setText(formatTime(millisUntilFinished)); 
      seeker.setProgress((int) (millisUntilFinished/1000/60) + 1); 
      if (used == true){ 
       reminder_time = ((int) (millisUntilFinished/1000)); 
       if (reminder_time == remindtime){ 
        reminderalarm(); 
        used = false; 
        } 
       } 

      } 
    } 
+1

Co jeśli użytkownik opuści na coś bardziej intensywny pamięci i system decyduje się zabić swoją aplikację? Chodzi mi o to, myślę, że chcesz ustawić czasomierz w serwisie. Następnie możesz wysłać audycję, której słucha twoja aplikacja po upływie ustawionego czasu. Prostsze i czystsze! – codinguser

+1

Coś, czego potrzebuję, aby przeczytać dalej. Nowość na Androida, a moja pierwsza myśl to: Jeśli aplikacja zostanie zabita, co pozostanie w hrabstwie ..? Wiem, jak zapisać bieżący stan, ale nie ma to żadnego znaczenia, ponieważ timer byłby wstrzymany. Twoje rozwiązanie brzmi jak trasa, którą powinienem eksplorować, wszelkie wskazówki na temat tego, co powinienem szukać/dociekać, docenić. – 11Monkeys

+1

Pomyśl o korzystaniu z Android AlarmManager http://developer.android.com/intl/de/reference/android/app/AlarmManager.html zamiast śledzić czas samodzielnie, użyj go przynajmniej po odebraniu wywołania onPause. Pozwoli to zaoszczędzić użytkownikowi dużo baterii i wykorzystanie procesora. – Janusz

Odpowiedz

0

Zobacz http://developer.android.com/guide/appendix/faq/framework.html#4:

Jak mogę sprawdzić, czy dana działalność jest już uruchomiony przed uruchomieniem?

Ogólny mechanizm uruchamiania nowego działania, jeśli nie jest uruchomiony - lub przeniesienia stosu działań do przodu, jeśli jest już uruchomiony w tle, to użycie flagi NEW_TASK_LAUNCH w wywołaniu startActivity().

+0

Powinno się to odbyć zgodnie z powyższym opisem, ale nadal nie działa tak, jak powinno być. Rozpoczynam moją aplikację, a następnie pukam przycisk domowy, a następnie aplikacja przechodzi w tło, ale wciąż działa, po 2-3 minutach wystrzeliwuję intencję z flagą NEW_TASK_LAUNCH, ale uruchamia ona ponownie aplikację z głównego punktu wejścia, a nie z miejsca, w którym opuściła – Zoombie

3

Dla mnie było to:

Intent intent = new Intent(Application.getContext(), AbstractFragmentActivity.instance.getClass()); 
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); 
intent.addFlags(Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
Application.getContext().startActivity(intent); 
0

Należy umieścić swój czasomierz na Service, w ten sposób masz pewność, że Android nie zabije swoją aplikację podczas gdy był on w tle. (Możesz umieścić całą swoją klasę MyCount w usłudze).

Z usługi można zawsze zabrać ze sobą aplikacji (aktywności) do przodu:

Intent intent = new Intent(getBaseContext(), TimerActivity.class); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); 
startActivity(intent); 
Powiązane problemy