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> 

Related articles: