2012-02-28 2 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); 

     }   
    }); 
} 

카운트 다운 클래스 : 나는 다시 Activity 가서 내가 무슨 일이있는 시간을 표시하기 위해 다른 하나를 시작하면

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); 
     } 
    } 
} 

}

그래서 난 할 것, 아는 것입니다 백그라운드에서 카운트 다운하여 예를 들어 텍스트보기에 표시합니다.

또는 알림 탭에서 완벽하게 시간이 초과 될 수도 있습니다. 감사합니다.

답변

0

MyCounter 인스턴스를 활동 밖으로 이동하십시오. 활동이 다시 시작되면 인스턴스가 다시 작성되어 이전 인스턴스가 사라집니다. 이 작업을 수행 할 수있는 몇 가지 방법이 있지만 활동에 액세스 할 수 있지만 수명주기에 대한 책임이없는 MyCounter 인스턴스가 있어야합니다. 내가 작성한 기본적인 ServiceLocator 구현을 사용하지만 사용자 정의 Application 클래스를 쉽게 만들고 타이머 (또는 타이머를 만들고 제어하는 ​​컨트롤러 클래스)를 유지할 수 있습니다.

+0

버프 분실했습니다! 알림 표시 줄에 시간을 표시 할 수 있습니까? 매초 카운트 다운이 있기 때문에 – Txispas

관련 문제