当定时器在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();
}
}
}
我已经成功地回答了我的问题,如果有人有同样的一个按照这个视频。https:/www.youtube.comwatch?v=nl-dheVpt8o&list=WL&index=2&t=165s