禁用按钮相应于国际时间6小时

时间:2018-06-06 15:22:31

标签: java android button

我是Android新手。我希望在按下按钮后禁用按钮,并在相应于系统时间后6小时/ 1天重新启用它。这就像每天给用户奖励一样。用户每天只能按一次奖励按钮 当我在6小时之前重新打开应用程序时,按钮再次启用。请帮忙!

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

    Button mybutton=(Button)findViewById(R.id.buttonid);
    final long currenttime= System.currentTimeMillis();

    final SharedPreferences mysharedPreferences= getSharedPreferences("timeinfo", Context.MODE_PRIVATE);
    final SharedPreferences.Editor editor=mysharedPreferences.edit();
    final long secondtime=mysharedPreferences.getLong("writetime",currenttime);

     mybutton.setOnClickListener(new View.OnClickListener()
    {

        public void onClick(final View v)
        {
            editor.putLong("writetime",currenttime);
            v.setClickable(false);

            if (currenttime-secondtime>300000)
            {
                v.setClickable(true);
            }
            else
            {
                v.setClickable(false);
            }
        }
    });

1 个答案:

答案 0 :(得分:0)

您可以节省按下共享偏好按钮的时间。 然后,下次创建活动/片段时,将读取该值并将其减去当前时间。如果超过6小时,则启用该按钮,否则禁用该按钮。 缺点:如果设备已植根并且用户更改了保存的值,则它们具有无限的按钮点击次数。您可以找到有关加密共享首选项的信息,以便您可以解决此问题,例如:https://medium.com/@ali.muzaffar/securing-sharedpreferences-in-android-a21883a9cbf8

myButton.setEnabled(false) // turn it off by default
if (currenttime-secondtime>=21600000) { // check if it can be enabled; 21600000ms is 6 hours
    myButton.setEnabled(true);  // wait time is up, enable button
    editor.putLong("writetime", currenttime); // since we enabled the button right now, we save the current time
    mybutton.setOnClickListener(new View.OnClickListener() { // user can click the button, add listener
        public void onClick(final View v) {
            // do whatever you want to do when the user can click the button
        }
    });
}

我会用这样的东西(替换mybutton.setOnClickListener(...)部分)