屏幕锁定后定时器复位

时间:2012-07-12 15:32:35

标签: java android

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

我该如何解决这个问题?

这是该类的代码:

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!

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

你需要在android文档中查看应用程序生命周期 - 如果你建议我会想象你的应用程序只是被android关闭并重新启动 - 因此你的onCreate会被再次调用并且计时器被重置。

Android应用程序不是简单的对象,而且你必须应对的部分是opsys在需要时推动你。

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