2017-05-13 1 views
1

timeLeft fonctionne pour la lecture de fichiers musicaux, mais comment travailler avec onResume? Je peux donc mettre l'activité en pause, puis reprendre avec la minuterie de gauche.Comment utiliser timeLeft pour reprendre countdowntimer sur Android?

Voici mon code:

public void countdownTimer() { 

    final TextView mTextField = (TextView)findViewById(R.id.timer); 
    Count = new CountDownTimer(TIMER, 1000) { 
     public void onTick(long millisUntilFinished) { 

      mTextField.setText("" +(millisUntilFinished/60000)); 
      long timeLeft = millisUntilFinished/1000; 
      if(timeLeft <= 4 && timeLeft >=2 && tgbutton.isChecked()) 
      { 
       mSoundPool.play(sixthMusicFile, 1f, 1f, 1, 0, 1f); 
      } 
      if(timeLeft <= 1 && tgbutton.isChecked()) 
      { 
       mSoundPool.play(seventhMusicFile, 1f, 1f, 1, 0, 1f); 
       vibrate(); 
      } 

     } 
     public void onFinish() { 
      Count.setText("done!"); 
     } 
     }.start(); 
} 

ÉDITÉ: Enfin, je me suis une réponse. Code de travail ici: Android CountDown Timer with Pause, Resume and Cancel button. Un grand merci à tous ceux qui m'aident avant.

+0

Qu'est-ce que vous avez besoin est ici: http://stackoverflow.com/a/10055480/5552022 –

+0

Merci pour la réponse @ omar-Aflak. Mais très confus moi. – Bonnie7

+0

Fondamentalement ce dont vous avez besoin est un CountDownTimer que vous pouvez mettre en pause/reprendre quand vous voulez, n'est-ce pas? –

Répondre

1

essayer cette activité:

public class MyActivity extends AppCompatActivity { 

        long TIMER = 1000000; 
        long timeLeft = 0; 
        private CountDownTimer Count; 
        SharedPreferences sharedPreferences; 

        @Override 
        protected void onCreate(@Nullable Bundle savedInstanceState) { 
         super.onCreate(savedInstanceState); 
         sharedPreferences = getSharedPreferences("App_shared_preferenced", Context.MODE_PRIVATE); 

        } 

        @Override 
        protected void onResume() { 
         super.onResume(); 
         timeLeft= sharedPreferences.getLong("leftTime",0); 
         if(timeLeft>0) 
         countdownTimer(timeLeft); 
         else countdownTimer(TIMER); 
        } 

        @Override 
        protected void onPause() { 
         super.onPause(); 
         sharedPreferences.edit().putLong("leftTime",timeLeft).commit(); 
         if(Count != null){                 
          Count.cancel(); 
         } 
        } 

        public void countdownTimer(long t) { 
          if(Count != null) Count.cancel(); 
         final TextView mTextField = null;// Your text view 
         Count = new CountDownTimer(t, 1000) { 
          public void onTick(long millisUntilFinished) { 

           mTextField.setText("" + (millisUntilFinished/60000)); 
           timeLeft = millisUntilFinished/1000; 
           if (timeLeft <= 4 && timeLeft >= 2 && tgbutton.isChecked()) { 
            mSoundPool.play(sixthMusicFile, 1f, 1f, 1, 0, 1f); 
           } 
           if (timeLeft <= 1 && tgbutton.isChecked()) { 
            mSoundPool.play(seventhMusicFile, 1f, 1f, 1, 0, 1f); 
            vibrate(); 
           } 
          } 

          public void onFinish() { 
           Count.setText("done!"); 
           timeLeft = 0; 
          } 
         }.start(); 
        } 
       } 
+0

Je pense que votre code est bon. Mais, quand je fais une pause, connectez-vous dire timeLeft = 0. Et quand je reviens à l'application, connectez-vous dire timeLeft = 0. Je ne sais pas ce qui se passe. – Bonnie7

+0

vous le voulez faire si l'utilisateur supprime l'application de l'arrière-plan ou tué si l'activité est déformée?, Si oui, j'ai mis à jour mon code de réponse. –

+0

Il suffit d'arrêter le compte à rebours lorsque l'utilisateur appuie sur le bouton "home". Et quand l'application est de nouveau jouée, la minuterie commence avec timeLeft. Maintenant, c'est comme 2 compte à rebours avec un temps différent. – Bonnie7