Вернуть для кнопки исходное состояние через определенное время
Подскажите, какие есть варианты. Необходимо, вернуть кнопку в исходное состояние, но через конкретно заданное время. Если делать через alarm, подскажите как? Нужно сделать так чтобы и после перезагрузки продолжало работать. Таймер, не годится. Вроде простое действие, но подскажите. Спасибо
Ответы (1 шт):
Автор решения: Вася Воронцов
→ Ссылка
Моё громоздкое решение:
/*Хранилище данных о времени изменения состояния*/
final SharedPreferences sp = getSharedPreferences("YourDirectoryName", Context.MODE_PRIVATE);
/*В первый запуск надо записать в хранилище данные*/
sp.edit().putLong("BlockTime", 0).commit();
/*Только в первый запуск, если время задаётся в активности,
то 0 замените на System.currentTimeMillis() + 10000,
где 10000 - любое целое число миллисекунд*/
/*Выделяем отдельный поток для задачи, чтобы не мешала остальным*/
HandlerThread buttonStateThread = new HandlerThread("your.example.app.ButtonStateThread");
buttonStateThread.start();
/*Создаём обработчик для этого потока*/
final Handler controlHandler = new Handler(buttonStateThread.getLooper());
/*Отдельные Runnable для изменения состояния кнопки из основного потока*/
final Runnable disableButton = new Runnable() {
@Override
public void run() {
button.setEnabled(false);
};
};
final Runnable ableButton = new Runnable() {
@Override
public void run() {
button.setEnabled(true);
};
};
/*Обработчик для основного потока*/
final Handler stateHandler = new Handler();
controlHandler.post(new Runnable() {
@Override
public void run() {
/*Получаем текущее время*/
long now = System.currentTimeMillis();
/*И сравниваем с записанным*/
if (sp.getLong("BlockTime", 0) <= now) stateHandler.post(disableButton);
controlHandler.postDelayed(this, 1);
};
});
Не думаю, что этот куда нужно посещать куда-либо, кроме активности. Ведь нет смысла в изменении состояния кнопки, если она не нарисована.
Благодаря сохранению времени в SharedPreferences, кнопка будет активирована в нужное время, только если не будет удалены данные, через настройки например.