如何仅使用Android中的计时器设置10分钟



我只想将时间设置为 10 分钟。每当完成/立即完成 10 分钟时,我的按钮都会被禁用并弹出消息。我已经启动了按钮事件的计时器,并在按钮事件上停止。但是我想在我的新活动开始时开始,并且我的所有按钮和文本视图在空闲/自动完成 10 分钟时被禁用。并显示弹出消息。怎么做?

这是我的代码。

该 xml 文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000" >
    <TextView
        android:id="@+id/timerValue"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/pauseButton"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="37dp"
        android:text="@string/timerVal"
        android:textColor="#ffffff"
        android:textSize="40sp" />
    <Button
        android:id="@+id/startButton"
        android:layout_width="90dp"
        android:layout_height="45dp"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:layout_marginLeft="38dp"
        android:text="@string/startButtonLabel" />
    <Button
        android:id="@+id/pauseButton"
        android:layout_width="90dp"
        android:layout_height="45dp"
        android:layout_alignBaseline="@+id/startButton"
        android:layout_alignBottom="@+id/startButton"
        android:layout_alignParentRight="true"
        android:layout_marginRight="38dp"
        android:text="@string/pauseButtonLabel" />
</RelativeLayout>

活动代码

public class TimerDemo extends Activity
{
    private Button startButton;
    private Button pauseButton;
    private TextView timerValue;
    private long startTime = 0L;
    private Handler customHandler = new Handler();
    long timeInMilliseconds = 0L;
    long timeSwapBuff = 0L;
    long updatedTime = 0L;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.demo_one);
        timerValue = (TextView) findViewById(R.id.timerValue);
        startButton = (Button) findViewById(R.id.startButton);
        startButton.setOnClickListener(new View.OnClickListener() 
        {
            public void onClick(View view)
            {
                startTime = SystemClock.uptimeMillis();
                customHandler.postDelayed(updateTimerThread, 0);
            }
        });
        pauseButton = (Button) findViewById(R.id.pauseButton);
        pauseButton.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View view) 
            {
                timeSwapBuff += timeInMilliseconds;
                customHandler.removeCallbacks(updateTimerThread);
            }
        });
    }
    private Runnable updateTimerThread = new Runnable() 
    {
        public void run()
        {
            timeInMilliseconds = SystemClock.uptimeMillis() - startTime;
            updatedTime = timeSwapBuff + timeInMilliseconds;
            int secs = (int) (updatedTime / 1000);
            int mins = secs / 60;
            secs = secs % 60;
            int milliseconds = (int) (updatedTime % 1000);
            timerValue.setText("" + mins + ":"
            + String.format("%02d", secs) + ":"
            + String.format("%03d", milliseconds));
            customHandler.postDelayed(this, 0);
        }
    };
}

使用countdowntimer来实现这一点

new CountDownTimer(60**10*1000, 1000) {
                public void onTick(long millisUntilFinished) {
                    time.setText("seconds remaining: "
                            + millisUntilFinished / 1000);

                }
                public void onFinish() {
                    here you write the function to start
                                             button to disable and popup
                }
            }.start();

在活动的 onCreate() 中创建计时器。然后禁用按钮并使用在达到计时器周期时执行的 Runnable 进行吐司

private Button button1;
private Button button2;
private TextView textview;
@overide
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.demo_one);
    button1 = (Button) findViewById(R.id.startButton);
    button2 = (Button) findViewById(R.id.pauseButton);
    textView = (TextView) findViewById(R.id.timerValue);
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
            @Override
        public void run() {
             button1.setEnabled(false);
             button2.setEnabled(false);
             textView.setEnabled(false);
        }
     }, 0, 10 * 60 * 1000);
}

你应该能够使用计时器:

Timer myTimer = new Timer();
myTimer.schedule(new TimerTask(){
  @Override
  public void run(){
    Button startButton = findViewById(R.id.startButton);
    startButton.setEnabled(false)
    Button pauseButton = findViewById(R.id.pauseButton);
    pauseButton.setEnabled(false)
    //And handle AlertView here
  }
}, 60 * 10 * 1000)

并将其设置在您的onCreate()方法中。

试试这段代码。它应该适合你

//YOUR GLOBAL VARIABLES
private static final long UPDATE_INTERVAL = 1000;
private static final long DELAY_INTERVAL = 0;
int seconds = 0;
Timer timer;
private void startTime() {
    timer = new Timer();
    timer.scheduleAtFixedRate(
        new TimerTask() {
            public void run() {
                seconds++;
                checkTime();
            }
        },
        DELAY_INTERVAL,
        UPDATE_INTERVAL);
}
private void checkTime() {
    int day = (int)TimeUnit.SECONDS.toDays(seconds);   
    long hours = TimeUnit.SECONDS.toHours(seconds) - (day *24);
    long minute = TimeUnit.SECONDS.toMinutes(seconds) - (TimeUnit.SECONDS.toHours(seconds)* 60);
    if (minute == 10) {
        timer.cancel();
    }
}
private void pauseTime() {      
    if (timer != null)
        timer.cancel();
}

只需在startButton onClick方法中调用startTime()方法,然后暂停调用pauseTime()。如果您想恢复,只需再次致电startTime()

最新更新