Android uses CountDownTimer class to realize countdown alarm clock
- 2021-08-12 03:41:19
- OfStack
The following uses CountDownTimer class to realize the countdown small alarm clock, while CountDownTimer class is actually very simple. Generally, you only need to rewrite its onFinish and onTick methods to realize the countdown small alarm clock. The code is as follows:
MainActivity:
package com.home.brewclock;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener {
private Button addTimeBtn;
private Button decreaseTimeBtn;
private Button startBtn;
private Button closeMusicBtn;
private TextView timeText;
private int brewTime = 3;
private CountDownTimer countDownTimer;
private boolean isBrewing = false;
private MediaPlayer alarmMusic;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
addTimeBtn = (Button) findViewById(R.id.main_btn_up);
decreaseTimeBtn = (Button) findViewById(R.id.main_btn_down);
startBtn = (Button) findViewById(R.id.main_start);
closeMusicBtn = (Button) findViewById(R.id.main_btn_close_music);
timeText = (TextView) findViewById(R.id.main_tv);
addTimeBtn.setOnClickListener(this);
decreaseTimeBtn.setOnClickListener(this);
startBtn.setOnClickListener(this);
closeMusicBtn.setOnClickListener(this);
setBrewTime(3);
}
/**
* Set the initial value of alarm clock countdown
*
* @param minutes
*/
public void setBrewTime(int minutes) {
if (isBrewing)
return;
brewTime = minutes;
if (brewTime < 1) {
brewTime = 1;
}
timeText.setText(String.valueOf(brewTime) + "m");
}
/**
* Turn on the alarm clock
*/
public void startBrew() {
// Create 1 A CountDownTimer Object records alarm clock time
countDownTimer = new CountDownTimer(brewTime * 60 * 1000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
timeText.setText(String.valueOf(millisUntilFinished / 1000)
+ "s");
}
@Override
public void onFinish() {
isBrewing = false;
timeText.setText(brewTime + "m");
startBtn.setText("Start");
// Loads the specified music and creates a MediaPlayer Object
alarmMusic = MediaPlayer.create(MainActivity.this, R.raw.music);
// Set to Loop Play
alarmMusic.setLooping(true);
// Play music
alarmMusic.start();
closeMusicBtn.setVisibility(0);
}
};
countDownTimer.start();
startBtn.setText("Stop");
isBrewing = true;
}
/**
* Stop timing
*/
public void stopBrew() {
if (countDownTimer != null) {
countDownTimer.cancel();
}
isBrewing = false;
startBtn.setText("Start");
}
@Override
public void onClick(View v) {
if (v == addTimeBtn) {
setBrewTime(brewTime + 1);
} else if (v == decreaseTimeBtn) {
setBrewTime(brewTime - 1);
} else if (v == startBtn) {
if (isBrewing) {
stopBrew();
} else {
startBrew();
}
} else if (v == closeMusicBtn) {
if (alarmMusic != null) {
alarmMusic.stop();
closeMusicBtn.setVisibility(8);
}
}
}
}
Layout file:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/main_btn_close_music"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=" Turn off music "
android:visibility="gone" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center"
android:orientation="horizontal" >
<Button
android:id="@+id/main_btn_down"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="-"
android:textSize="40dp" />
<TextView
android:id="@+id/main_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="0:00"
android:textSize="40dp" />
<Button
android:id="@+id/main_btn_up"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+"
android:textSize="40dp" />
</LinearLayout>
<Button
android:id="@+id/main_start"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="Start" />
</RelativeLayout>