0

ユーザーがアプリケーションを起動するとタイマーが開始するアプリケーションがあります。10 秒後、リーミングは 15 秒だけというAlertDialogポップアップが表示され、タイマーが表示され、14 秒後に消えます。これは、アプリケーションの最初のアクティビティでうまく機能します。ユーザーが最初からパスした場合Activty-->TimedNotify Activityタイマーは 10 秒後に停止します。タイマーが再起動し、まったく問題なく動作しますonUserInteraction()TimedNotifyどこが間違っているのか教えてください。

public class FirstActivity extends TimedNotify{
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    {    
        super.onCreate(savedInstanceState);   
        setContentView(R.layout.timercheck);    
        final Button btnstart2 = (Button) findViewById(R.id.btn);

        btnstart2.setOnClickListener( new OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent(FirstActivity.this,
                                       TimedNotify.class);
                 startActivity(intent);
            }
        });
    }
}

public class TimedAlert extends Activity 
{
    static CountDownTimer timer1, timer2;
    int flag = 0;
    protected static final String TAG = null;
    public static AlertDialog alert, alertdialog;
    private static Context context;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final TextView mCounter1TextField = (TextView) findViewById (R.id.mCounter1TextField);

        // first timer set for 10sec
        timer1 = new CountDownTimer(10000, 1000) 
        {
            @Override
            public void onTick(long millisUntilFinished) 
            {
                Log.v(TAG, "timer1 ticking");
                mCounter1TextField.setText("Seconds left: "
                                            + formatTime(millisUntilFinished));
            }

            public void onFinish() {
                //after 10sec display alert box and show timer 
                Log.v(TAG, "timer1 finished");
                timer1.cancel();
                AlertDialog.Builder builder = new AlertDialog.Builder(
                                    TimedAlert.this);
                builder.setTitle("Session Time Out");
                builder.setMessage("00:15");
                builder.setPositiveButton("Resume", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog2,int iwhich)
                    {
                        Intent in = new Intent(TimedAlert.this,FirstActivity.class);
                        //in case there are many events ..the intent should be passed  to the last activity on clicking resume
                        in.setAction(Intent.ACTION_MAIN);
                        in.addCategory(Intent.CATEGORY_LAUNCHER);
                        onUserInteraction();
                    }
                });

                builder.setNegativeButton ("No", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog2,int iwhich)
                    {
                        timer2.cancel();
                        timer1.start();
                    }
                });

                alert = builder.create();
                alert.show();

                timer2 = new CountDownTimer(15000, 1000) 
                {
                    @Override
                    public void onTick(long millisUntilFinished)
                    {
                        Log.v(TAG, "timer2 ticking");
                        alert.setMessage("Your Session will expire in 5 minutes . Timleft00:"+  (millisUntilFinished / 1000));
                        mCounter1TextField.setText("Seconds left: "+  formatTime (millisUntilFinished));
                    }

                    //after 15 sec dismiss alert box
                    public void onFinish() {
                        Log.v(TAG, "timer2 finished");
                        timer2.cancel();
                        alert.dismiss();
                    }
                }.start();
            }
        }.start();
    }

    @Override
    public void onBackPressed() {
        Intent in = new Intent(TimedAlert.this, FirstActivity.class);
        startActivity(in);
    }

    public String formatTime(long millis) {
        String output = "00:00";
        long seconds = millis / 1000;
        long minutes = seconds / 60;
        seconds = seconds % 60;
        minutes = minutes % 60;
        String secondsD = String.valueOf(seconds);
        String minutesD = String.valueOf(minutes);

        if (seconds < 10)
            secondsD = "0" + seconds;
        if (minutes < 10)
            minutesD = "0" + minutes;
        output = minutesD + " : " + secondsD;
        return output;
    }

    public void onUserInteraction() {
        super.onUserInteraction();
        // Remove any previous callback
        try {
            Log.v(TAG, "user interacted");
            timer1.start();
            timer2.cancel();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        Log.v(TAG, "paused");
        onUserInteraction();
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();

        Log.v(TAG, "resumed");
        onUserInteraction();
    }

    private void handleIntent(Intent intent) {
        timer1.start();
    }

    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();

        Log.v(TAG, "stopped");
        timer1.start();
    }

    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        Log.v(TAG, "started");
        timer1.start();
    }
}
4

1 に答える 1

1

OK、ここにあなたを助けるかもしれないいくつかの注意事項があります:

public void onClick(DialogInterface dialog2, int iwhich) {
    Intent in = new Intent(TimedAlert.this,
            FirstActivity.class);
    in.setAction(Intent.ACTION_MAIN);
    in.addCategory(Intent.CATEGORY_LAUNCHER);

    onUserInteraction();
}

startActivity(in);すべてのパラメーターを設定した後はありません。

onPause()を呼び出してonResume()呼び出すonUserInteraction()のにonStart()、しないのはなぜonStop()ですか?

onPause()実際、 andonResume()のみを使用するか、 onStart()andを使用するかを選択する必要がありますonStop()。さらに、タイマーを再起動するべきではありませんかonPause()?onStop()

報告された問題についてさらに考えてみると、問題があるのは 2 番目の活動を行っているときだと言います。アクティビティのライフサイクルを確認してください。アクティビティの新しいインスタンスを起動したことが原因ではないかと思います。アクティビティに使用するマニフェストを設定してみてくださいandroid:launch mode="singleTask"

于 2012-05-30T05:01:22.103 に答える