Вы можете использовать приведенный ниже код для вашей кнопки:
public void button_OnClick(View view) {
Button button=findViewById(R.id.button);
button.setEnabled(false);
final long startTime= Calendar.getInstance().getTime().getTime();
final Timer timer=new Timer();
final Activity activity = this;
TimerTask task=new TimerTask() {
@Override
public void run() {
long curentTime=Calendar.getInstance().getTime().getTime();
long elapsedTime=curentTime-startTime;
ToastTime(10*60*1000, elapsedTime);
if(curentTime-startTime>=10*60*1000){ //10 minutes in millisecond
timer.cancel();
EnableButton();
}
}
};
timer.schedule(task, 500, 2000);
}
Где
private void ToastTime(long totalTime, long elapsedTime){
final int remainInSec = (int)(totalTime - elapsedTime) / 1000;
if(remainInSec>0) {
final Activity activity = this;
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity, String.valueOf(remainInSec) + " seconds to enable button", Toast.LENGTH_SHORT).show();
}
});
}
}
private void EnableButton(){
Button button=findViewById(R.id.button);
button.setEnabled(true);
}
Или для упрощения:
public void button_OnClick(View view) {
final Button button=findViewById(R.id.button);
button.setEnabled(false);
final long startTime= Calendar.getInstance().getTime().getTime();
final Timer timer=new Timer();
TimerTask task=new TimerTask() {
@Override
public void run() {
long curentTime=Calendar.getInstance().getTime().getTime();
long elapsedTime=curentTime-startTime;
ToastTime(10*60*1000, elapsedTime);
if(curentTime-startTime>=10*60*1000){ //10 minutes in millisecond
timer.cancel();
button.setEnabled(true);
}
}
};
timer.schedule(task, 500, 2000);
}
private void ToastTime(long totalTime, long elapsedTime){
final int remainInSec = (int)(totalTime - elapsedTime) / 1000;
if(remainInSec>0) {
final Activity activity = this;
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(activity, String.valueOf(remainInSec) + " seconds to enable button", Toast.LENGTH_SHORT).show();
}
});
}
}
Редактировать
Если у вас ошибка many run on main thread
, попробуйте следующее: Объявите глобальную переменную:
boolean isLooperCalled;
Теперь используйте это:
public void button_OnClick(View view) {
final Button button=findViewById(R.id.button);
button.setEnabled(false);
isLooperCalled=false; //It's new
final long startTime= Calendar.getInstance().getTime().getTime();
final Timer timer=new Timer();
TimerTask task=new TimerTask() {
@Override
public void run() {
if(isLooperCalled==false){ //It's new
Looper.prepare();
isLooperCalled=true;
}
long curentTime=Calendar.getInstance().getTime().getTime();
long elapsedTime=curentTime-startTime;
ToastTime(10*60*1000, elapsedTime);
if(curentTime-startTime>=10*60*1000){ //10 minutes in millisecond
timer.cancel();
button.setEnabled(true);
}
}
};
timer.schedule(task, 500, 2000);
}
private void ToastTime(long totalTime, long elapsedTime){
final int remainInSec = (int)(totalTime - elapsedTime) / 1000;
if(remainInSec>0) { //It's edited
Toast.makeText(this, String.valueOf(remainInSec) + " seconds to enable button", Toast.LENGTH_SHORT).show();
}
}
Если ошибка не устранена, увеличьте шаг по времени в timer.schedule(task, 500, 2000)
с 2000
до 5000
из 10000
(5 секунд или 10 секунд).