2012-02-28 11 views
3

私はカウントダウンタイマーを設計していますが、これは完璧に動作しますが、これはActivityにとどまっています。カウントダウンが始まり、たとえば私が戻って他のActivityを開始すると、countdonwsはカウントダウンを続けます。そして論理的には、カウントダウンタイマーがどこにあるのかを再開すると、何もカウントダウンしていないように見えますが、バックグラウンドでカウントダウンしています。タイマーのオンチクで、通知タブ。さまざまなアクティビティでカウントダウンタイマーを取得する

コードは次のとおりです。sendnotificationメソッドは、時刻が終了するとアラートをスローするメソッドで、sendnotificationTiempoは、毎秒タブに通知を送信して先頭に表示します。

public static final int NOTIFICATION_ID = 33; 
public static final int NOTIFICATION_ID_Tiempo = 34; 
private int minCrono; 
TextView text; 
MyCounter timer; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    StartCrono = (Button) findViewById(R.id.butt_start); 
    CancelCrono = (Button) findViewById(R.id.butt_cancel); 
    text=(TextView)findViewById(R.id.text_countTime1); 

    CancelCrono.setEnabled(false); 


    minCrono = mins.getCurrentItem(); 

    StartCrono.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      minCrono=(60000*minCrono);  
      timer = new MyCounter(minCrono,1000); 
      timer.start(); 
     } 
    }); 

    CancelCrono.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      timer.cancel();  
      text.setText("El tiempo se ha cancelado"); 
      minutosCrono = mins.getCurrentItem(); 

      if (mNotificationManager != null) 
       mNotificationManager.cancel(NOTIFICATION_ID_Tiempo); 

     }   
    }); 
} 

カウントダウンクラス:

public class MyCounter extends CountDownTimer{   
    public MyCounter(long millisInFuture, long countDownInterval) {  
     super(millisInFuture, countDownInterval);   
    } 
    @Override 
    public void onFinish() { 

     StartCrono.setEnabled(true); 
     CancelCrono.setEnabled(false); 
     mins.setEnabled(true); 
     minCrono = mins.getCurrentItem(); 
     // 

     text.setText("Time Complete!"); 

     sendnotification("Guau", "Time finished."); 

    } 
    @Override 
    public void onTick(long millisUntilFinished) { 
     long segRestantesTotal=(millisUntilFinished/1000); 
     long minRestantes= (segRestantesTotal/60); 
     long segRestantes= (segRestantesTotal%60); 


     if(segRestantes>=10){ 
      text.setText(minRestantes+":"+segRestantes); 
      sendnotificationTiempo("Guau", minRestantes+":"+segRestantes); 
     } 
     else{ 
      text.setText(minRestantes+":0"+segRestantes); 
      sendnotificationTiempo("Guau", minRestantes+":0"+segRestantes); 
     } 
    } 
} 

}

それでは、私は希望を行うには、何であるかの時間を表示するために、私はActivityを戻って、私は別のものを起動したときに知ることです例えばテキストビューでそれを示すためにバックグラウンドでカウントダウンします。

通知タブから完全にカウントダウンしている時間を取得できますか。 ありがとう!

答えて

0

MyCounterインスタンスをアクティビティから移動します。アクティビティーが再始動すると、インスタンスが再作成されて、古いものがなくなります。これを行うにはいくつかの方法がありますが、あなたのMyCounterインスタンスをアクティビティがアクセスできる場所に置く必要がありますが、ライフサイクルの責任は負いません。私は書いた初歩的なServiceLocator実装を使用していますが、カスタムアプリケーションクラスを簡単に作成して、タイマー(またはタイマーを作成して制御するコントローラークラス)を保持することは簡単です。

+0

buff私は迷っています!通知バーに表示されている時間を取得することは可能ですか?毎秒カウントダウンがあるので – Txispas

関連する問題