如何在按钮上实现超时?

时间:2019-02-28 22:55:30

标签: android timer android-service onclicklistener android-button

我想在按钮上放一个类似计时器的东西,也就是说,我有一个按钮,按下该按钮后变为非活动状态,例如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 :(得分:0)

我只保存最后一次单击的日期时间(例如,在SharedPreference中),每当活动/片段变为活动状态时,您都要检查该值并将其减去当前日期时间。

如果您的应用是公开的,用户可以更改设备时钟,则可以配置BroadcastReceiver,该时钟每次时钟更改都会触发,并阻止您的应用或采取相应的操作。

如果此按钮在您自己的某个API中触发并执行操作,则处理该按钮的最佳方法是在服务器中记录上一次时间。请记住,客户端应用程序在很多方面都受到限制。

答案 1 :(得分:0)

您可以从API查看当前时间,并在单击按钮时将其保存在“首选项”中,并根据该时间启用/禁用该按钮。