2012-07-12 68 views
1

我创建了一个带有倒计时器的小型应用程序,用于扑克盲注,但我注意到当锁定屏幕打开时,计时器将从开始重置。屏幕锁定后重置计时器

我怎样才能解决这个问题?

这是类的代码:

public class timer extends Activity { 
     /** Called when the activity is first created. */ 

     TextView contoallarovescia; 
     TextView clicca; 
     public boolean touchattivo=false; 
     public int giro=1; 
     public int girosecondi=8*60; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 

      this.requestWindowFeature(Window.FEATURE_NO_TITLE); 

      super.onCreate(savedInstanceState); 
      setContentView(R.layout.timer); 

      contoallarovescia = (TextView) this.findViewById(R.id.contoallarovescia); 
      Typeface typeFace=Typeface.createFromAsset(getAssets(),"font/LCDMB___.TTF"); 
      contoallarovescia.setTypeface(typeFace); 

      clicca = (TextView) this.findViewById(R.id.clicca); 
      chiamatimer(girosecondi*1000,1000); 

     } 

     @Override 
     public boolean onTouchEvent(MotionEvent event) { 
      // MotionEvent object holds X-Y values 


      if (touchattivo) 
      { 

       chiamatimer(girosecondi*1000,1000); 

      } 

      return super.onTouchEvent(event); 
     } 


     public void chiamatimer(int secondi, int ciclo) 
     { 


      touchattivo=false; 
      clicca.setVisibility(View.INVISIBLE); 

      new CountDownTimer(secondi, ciclo) { 




       public void onTick(long millisUntilFinished) { 

        int sec =(int) (millisUntilFinished/1000); 


        String result = String.format("%02d:%02d", sec/60, sec % 60); 


        contoallarovescia.setText(result); 
       } 

       public void onFinish() { 


        String result = String.format("%02d:%02d", 0, 0); 
        giro++; 

        if (giro==5) 
        { 

         girosecondi=6*60; 

        } 

        contoallarovescia.setText(result); 

        clicca.setVisibility(View.VISIBLE); 
        touchattivo=true; 

        try { 
          Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
          Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification); 
          r.play(); 
         } catch (Exception e) {} 




       } 
       }.start(); 

     } 

} 

TNX!

+0

你压倒onPause吗? – Addison 2012-07-12 15:42:31

+0

发布您的代码。 – 2012-07-12 15:43:09

回答

0

你需要看看Android文档中的应用程序生命周期 - 在这种情况下,你建议我会想象你的应用程序只是被关闭并由android重新启动 - 因此你的onCreate被再次调用并且定时器被重置。

Android应用程序不是简单的对象,你需要应付的一部分是opsys在需要的时候推动你。

特别看看onPause,以及如何将结束时间存储在稍后传递给onCreate的包中。这将解决您当前的错误。

+0

但计时器不会暂停,但继续倒计时,并当计数到0时给我报警。 – 2012-07-12 16:27:54

+0

也许这可以帮助我? http://www.java2s.com/Open-Source/Android/Timer/multitimer-android/com/cycleindex/multitimer/CountDownTimerWithPause.java.htm – 2012-07-12 16:35:35

3
pm = (PowerManager)getApplicationContext().getSystemService(Context.POWER_SERVICE); 
     pmWL = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "My Tag"); 
     pmWL.acquire(); 

     mKeyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); 
     mKeyguardLock = mKeyguardManager.newKeyguardLock("activity_classname"); 
     mKeyguardLock.disableKeyguard(); 
+0

开放式电源管理器和开放式键盘管理器的拳头。 – 2012-08-31 07:12:43