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!

4

2 に答える 2

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();
于 2012-08-31T07:09:51.250 に答える
0

Androidドキュメントでアプリケーションのライフサイクルを確認する必要があります。アプリケーションがAndroidによってシャットダウンされて再起動されているだけだと思われる場合は、onCreateが再度呼び出され、タイマーがリセットされます。

Androidアプリケーションは単純なオブジェクトではなく、対処しなければならないことの一部は、必要なときにopsysがあなたを押しのけることです。

具体的には、onPauseと、後でonCreateに渡されるバンドルに終了時刻を保存する方法を確認してください。これにより、現在のバグが解決されます。

于 2012-07-12T16:00:08.703 に答える