Как реализовать тайм-аут на кнопке? - PullRequest
0 голосов
/ 01 марта 2019

Я хочу поставить на кнопку что-то вроде таймера, то есть у меня есть кнопка, после нажатия она становится неактивной, скажем, в течение 2 часов, через два часа она снова активируется, но таймер продолжает отсчитывать времядаже если приложение закрыто или свернуто.Как сделать кнопку неактивной, я знаю, помогает понять, как сделать таймер.

Я написал код так, чтобы при нажатии кнопки она записывала дату и отключала кнопку, а послечто она получит новую дату и найдет разницу, а когда она пройдет через 10 секунд, она снова активирует кнопку, но код не работает, объясните почему?

public class MainActivity extends AppCompatActivity {

Button button;
TextView textView;
private String TAG;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button = findViewById(R.id.button);
    textView = findViewById(R.id.textView);
    final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);




    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            button.setEnabled(false);
            SharedPreferences.Editor editor = preferences.edit();
            long startTime = System.currentTimeMillis();
            editor.putLong("Time", startTime);
            editor.apply();
            Log.d(TAG, "Time " + startTime);
        }
    });

    long startMillis = preferences.getLong("Time", 0);
    long now = System.currentTimeMillis();
    Log.d(TAG, "Now " + now);
    long difference = now - startMillis;

    if (difference == 10000) {
        button.setEnabled(true);
    }
    Log.i(TAG, "Time111: " + difference);

}

@Override
protected void onStart() {
    super.onStart();

}

}

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Вы можете проверить текущее время из API и сохранить его в настройках при нажатии кнопки, а также включить / отключить кнопку в соответствии с этим.

0 голосов
/ 01 марта 2019

Я бы просто сохранил дату последнего щелчка (например, в SharedPreference), и каждый раз, когда активность / фрагмент активируется, вы проверяете значение и вычитаете его до текущей даты.

Если ваше приложение является общедоступным, в котором у пользователя есть возможность изменять часы устройства, вы можете настроить BroadcastReceiver, который срабатывает каждый раз, когда часы меняются, и блокирует ваше приложение или выполняет соответствующее действие.

Если эта кнопка срабатывает и выполняет действие в каком-либо собственном API, лучший способ справиться с ней - записать последний раз на вашем сервере.Помните, что мы ограничены во многих отношениях в клиентском приложении.

...