当定时器倒计时结束时,向用户发送通知[重复]。

问题描述 投票:-1回答:1

当定时器在0和完成它的倒计时时,我想发送一个通知给用户作为一个提醒。如果有人可以帮助,请做。我已经创建了一个定时器活动,它的倒计时的时间,用户已经设置。

下面是我的定时器活动。

public class TimerActivity extends AppCompatActivity {...

private EditText editTimer;

private TextView textViewTimer;

private Button setButton;

private Button startPauseButton;

private Button resetButton;

private CountDownTimer countDownTimer;

private boolean isTimerRunning;

private long startTimeInMs;

private long timeLeft;

private long endTime;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_timer);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    editTimer = findViewById(R.id.edit_Timer);

    textViewTimer = findViewById(R.id.timer);

    setButton = findViewById(R.id.set_Button);

    startPauseButton = findViewById(R.id.start_pause_button);

    resetButton = findViewById(R.id.reset_button);



    setButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            String inputNum = editTimer.getText().toString();

            if (inputNum.length() == 0) {

                Toast.makeText(TimerActivity.this, "Ops, you haven't set any minutes", Toast.LENGTH_SHORT).show();
                return;
            }

            long msInput = Long.parseLong(inputNum) * 60000;

            if (msInput ==0){
                Toast.makeText(TimerActivity.this, "Please enter a positive number", Toast.LENGTH_SHORT).show();

                return;

            }

            setTime(msInput);

            editTimer.setText("");

            editTimer.onEditorAction(EditorInfo.IME_ACTION_DONE);

        }

    });

    startPauseButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            if (isTimerRunning) {

                pauseTimer();

            } else {

                startTimer();

            }

        }

    });

    resetButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            resetTimer();

        }

    });

}

private void setTime(long mSeconds){

    startTimeInMs = mSeconds;

    resetTimer();
}

//start timer function

private void startTimer(){

    endTime = System.currentTimeMillis() + timeLeft;

    countDownTimer = new CountDownTimer(timeLeft,1000) {

        @Override
        public void onTick(long millisUntilFinished) {

            timeLeft = millisUntilFinished;

            updateTimerText();

        }

        @Override
        public void onFinish() {

            isTimerRunning = false;

            updateOnButtons();
        }

    }.start();

    isTimerRunning = true;

    updateOnButtons();
}


private void pauseTimer(){

    countDownTimer.cancel();

    isTimerRunning = false;

    updateOnButtons();
}

private void resetTimer(){

    timeLeft = startTimeInMs;

    updateTimerText();

    updateOnButtons();

}

private void updateTimerText(){

    int hours = (int) (timeLeft / 1000) / 3600;

    int mins = (int) ((timeLeft / 1000) % 3600) / 60;

    int secs = (int) (timeLeft / 1000) % 60;

    String formatTimeLeft;

    if (hours > 0){

        formatTimeLeft = String.format(Locale.getDefault(),

                "%d:%02d:%02d", hours, mins, secs);
    } else{

        formatTimeLeft = String.format(Locale.getDefault(),

                "%02d:%02d", mins, secs);

    }

    textViewTimer.setText(formatTimeLeft);

}

private void updateOnButtons(){

    if (isTimerRunning){

        editTimer.setVisibility(View.INVISIBLE);

        setButton.setVisibility(View.INVISIBLE);

        resetButton.setVisibility(View.INVISIBLE);

        startPauseButton.setText("Pause");

    }else{

        editTimer.setVisibility(View.VISIBLE);

        setButton.setVisibility(View.VISIBLE);

        startPauseButton.setText("Start");

        if(timeLeft < 1000){

            startPauseButton.setVisibility(View.INVISIBLE);

        }else{

            startPauseButton.setVisibility(View.VISIBLE);

        }

        if (timeLeft < startTimeInMs){

            resetButton.setVisibility(View.VISIBLE);

        } else{

            resetButton.setVisibility(View.INVISIBLE);

        }

    }

}

@Override
protected void onSaveInstanceState(Bundle outState) {

    super.onSaveInstanceState(outState);

    outState.putLong("timeLeft", timeLeft);

    outState.putBoolean("isTimerRunning", isTimerRunning);

    outState.putLong("endTime", endTime);

}

@Override
protected void onStart() {

    super.onStart();

    SharedPreferences myPrefs = getSharedPreferences("myPrefs", MODE_PRIVATE);

    startTimeInMs = myPrefs.getLong("startTimeInMs", 600000);

    timeLeft = myPrefs.getLong("timeLeft", startTimeInMs);

    isTimerRunning = myPrefs.getBoolean("isTimerRunning", false);

    updateTimerText();

    updateOnButtons();

    if (isTimerRunning) {

        endTime = myPrefs.getLong("endTime", 0);

        timeLeft = endTime - System.currentTimeMillis();

        if (timeLeft < 0){

            timeLeft =0;

            isTimerRunning = false;

            updateTimerText();

            updateOnButtons();

        }else{

            startTimer();

        }

    }

}

@Override
protected void onStop() {
    super.onStop();

    SharedPreferences myPrefs = getSharedPreferences("myPrefs", MODE_PRIVATE);
    SharedPreferences.Editor myEditor = myPrefs.edit();

    myEditor.putLong("startTimeInMs", startTimeInMs);
    myEditor.putLong("timeLeft", timeLeft);
    myEditor.putBoolean("isTimerRunning", isTimerRunning);
    myEditor.putLong("endTime", endTime);

    myEditor.apply();


    if (countDownTimer != null) {
        countDownTimer.cancel();
    }
}

}

java android timer notifications countdown
1个回答
0
投票

我已经成功地回答了我的问题,如果有人有同样的一个按照这个视频。https:/www.youtube.comwatch?v=nl-dheVpt8o&list=WL&index=2&t=165s

© www.soinside.com 2019 - 2024. All rights reserved.