Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 同步倒计时-android开发_Java_Android - Fatal编程技术网

Java 同步倒计时-android开发

Java 同步倒计时-android开发,java,android,Java,Android,我有一个应用程序,它有一个倒计时计时器,当每个用户打开应用程序时,应该显示相同的计时器。为了做到这一点,我已经根据用户的手机显示在大纪元时间的时间。我做以下计算(我认为…)以确保每部手机显示相同的时间,并且倒计时时钟连续且准确。然而,每次我打开应用程序时,时钟都处于完全不同的时间,我认为它应该持续倒计时和重置。发生了什么?我已将我的代码包括在下面: private static final int COUNTDOWN_DURATION = 30; //time in seconds priva

我有一个应用程序,它有一个倒计时计时器,当每个用户打开应用程序时,应该显示相同的计时器。为了做到这一点,我已经根据用户的手机显示在大纪元时间的时间。我做以下计算(我认为…)以确保每部手机显示相同的时间,并且倒计时时钟连续且准确。然而,每次我打开应用程序时,时钟都处于完全不同的时间,我认为它应该持续倒计时和重置。发生了什么?我已将我的代码包括在下面:

private static final int COUNTDOWN_DURATION = 30; //time in seconds 
private static final long BASE_TIME = 1470729402L; //an arbitrary Epoch time that I have picked as a reference point

private TextView tvTimer;
private Long currentTimeMillis;
private int finalTime;
private boolean firstTime;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState)

    //set up basics
    ...

    //set up timer
    tvTimer = (TextView) findViewById(R.id.tvTimer);
    firstTime = true;
    setCurrentTime();
}

private void setCurrentTime() {
    currentTimeMillis = System.currentTimeMillis();
    long currentTimeSecs = currentTimeMillis/1000;
    long timeDiff = currentTimeSecs - BASE_TIME;

    //determines what spot the countdown timer is at when the app is started
    finalTime = (int) (timeDiff % COUNTDOWN_DURATION);
    resetTimer();
}

public void resetTimer(){
    if (firstTime) {
        CountDownTimer countDownTimer = new CountDownTimer(finalTime *      1000, 1000) {

            public void onTick(long millisUntilFinished) {
                tvTimer.setText(" " + millisUntilFinished / 1000 + " ");
            }

            public void onFinish() {
                resetTimer();
            }
        };
        countDownTimer.start();
        firstTime = false;
    }
    else {
        CountDownTimer countDownTimer = new CountDownTimer(COUNTDOWN_DURATION * 1000, 1000) {

            public void onTick(long millisUntilFinished) {
                tvTimer.setText(" " + millisUntilFinished / 1000 + " ");
            }

            public void onFinish() {
                resetTimer();
            }
        };
        countDownTimer.start();
    }
}