即使应用程序已退出,也会禁用一段时间的按钮

时间:2016-05-22 21:18:32

标签: android

如何禁用按钮让我们说30分钟?我正在尝试这个:

 new CountDownTimer(30000, 1000) {

 public void onTick(long millisUntilFinished) {
     btn.setEnabled(false);
     btn.setText("fdfjhsn" + millisUntilFinished / 1000);
 }

 public void onFinish() {
     btn.setEnabled(true)
 }
}.start();

但这并不像我想的那样有用。当我更改活动并通过倒计时返回到此活动时,按钮将变为启用状态。 你能告诉我如何实时阻止按钮,与用户无关吗?在此先感谢;)

2 个答案:

答案 0 :(得分:3)

你的逻辑中有一些错误:

  • new CountDownTimer(30000, 1000)将倒数30,000毫秒,即30秒

  • 退出应用程序时计时器将停止并重新启动,因为您没有将值保留在任何位置

您需要做的是,当您想要开始30分钟时段时,请将当前时间保存在SharedPreference

SharedPreferences prefs = this.getSharedPreferences("time", Context.MODE_PRIVATE);
long currentTime = new Date().getTime();
SharedPreferences.Editor editor = prefs.edit();
editor.putLong("time", currentTime);
editor.apply();
btn.setEnabled(false);

现在,只要您想要返回应用程序(在onCreateonResume中),检索该值并检查同时是否超过半小时:

SharedPreferences prefs = this.getSharedPreferences("time", Context.MODE_PRIVATE);
 long previousTime = prefs.getLong("time", 0);
 long currentTime = new Date().getTime();
// 30*60*1000 - 30 min, each with 60 sec, each with 1000 millisec
if (currentTime - previousTime > 30*60*1000){
 //enable the button
 btn.setEnabled(true);
} else {
 //disable it and start a new CountdownTimer; this is needed in order for
 //it to to become enabled if you're still in the app and the time ran out
 btn.setEnabled(false);
  new CountDownTimer(currentTime - previousTime, 1000){
      public void onTick(long millisUntilFinished) {
      btn.setText("fdfjhsn" + millisUntilFinished / 1000);
      }

     public void onFinish() {
         btn.setEnabled(true)
     }
}.start();

答案 1 :(得分:0)

保存/到持久性的时间戳,例如保存到共享首选项。下次开始活动时,只需检查" disabled-to"时间戳。