在android应用程序中有限时间启用按钮

在android应用程序中有限时间启用按钮,android,Android,下面是一个例子,我希望能够在用户操作后在有限的时间(比如30分钟)内启用应用程序中的按钮。30分钟后,此按钮将再次禁用。 在android中实现这一点的最佳方式是什么 因为用户可能会重启设备或关闭应用程序,所以我不能简单地使用倒计时。即使如此,考虑到有一个特定的时间间隔开始结束日期,我可以简单地对照当前时间检查按钮的状态。但是,用户只需将手机日期向后拨15分钟,按钮就可以继续启用。例如,您可以每分钟使用一次倒计时,然后将该进度保存在配置文件中。当用户有30分钟的时间时,您可以禁用该按钮。 您可以

下面是一个例子,我希望能够在用户操作后在有限的时间(比如30分钟)内启用应用程序中的按钮。30分钟后,此按钮将再次禁用。 在android中实现这一点的最佳方式是什么


因为用户可能会重启设备或关闭应用程序,所以我不能简单地使用倒计时。即使如此,考虑到有一个特定的时间间隔开始结束日期,我可以简单地对照当前时间检查按钮的状态。但是,用户只需将手机日期向后拨15分钟,按钮就可以继续启用。

例如,您可以每分钟使用一次倒计时,然后将该进度保存在配置文件中。当用户有30分钟的时间时,您可以禁用该按钮。 您可以将配置文件写入用户无法触摸的应用程序内部文件夹。
如果用户在7分钟内关闭应用程序,则在您的配置文件中存在这7分钟。如果用户把电话的日期放回去,他也不在乎;)

正常情况

  • 按钮变得可见
  • 在共享首选项中保存时间戳和时区信息
  • 启动
    AlarmManager
    ,它将唤醒并清除共享首选项并禁用按钮状态
案例,当用户关闭并打开应用程序时

  • 按钮变得可见
  • 之前的所有步骤加上每次打开应用程序时,检查共享首选项中的值(如果有)和当前时间之间的差异,具体取决于显示按钮的时间
用户更改时间时的情况

  • 按钮变得可见
  • 前面的所有步骤加上在
    AndroidManifest
    ()中注册时间更改事件,并根据时间更改的程度对
    SharedReferences
    执行必要的操作

显然,如果用户清除应用程序的数据,这种技术是无用的,您必须执行与后端的同步(可能是???。

使用
System.currentTimeMillis()
保存在首选项开始时间中,并每次检查当前时间是否相同(相同
System.currentTimeMillis()
)已过去30分钟。

使用以下代码禁用按钮30分钟。 btn.setEnabled(false)

新线程(newrunnable()){


在这里,您最好使用倒计时器,将按钮启用时间的进度写入首选项帮助程序。 定义一个间隔,比如30秒或1分钟,并在用户操作完成后立即启动此倒计时

根据您选择的时间间隔,每30秒或每1分钟更新首选项帮助程序中的值

更新间隔为1分钟的示例

public void updateButtonDisableTimer(){
SharedPreferences sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);

int oldTimerValue =  sharedpreferences.getInt("key", 0); // is the default value in case no value is found.
Editor editor = sharedpreferences.edit();
if(oldTimerValue > 30){
    //this the case when you need to stop the timer
     editor.putInt("key", 0);
   //Write code to disable the button
}else{
  int newValue = oldTimerValue + 1; //1 min is interval
  editor.putInt("key", newValue);
} 
editor.commit();
}

这将在应用程序关闭和所有其他情况下起作用。只有在清除数据时才会失败。希望它能起作用:)

您可以使用处理程序的postDelayed方法。请参阅下面的-

    //when use press button
    new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                //disable your button here
            }
        }, 3*1000); //your delay time

希望对您有所帮助。

单击按钮,将当前时间存储在SharedReference中。 当您回来时,检查当前时间和sharedPref时间之间的差异。 如果超过30分钟,则启用,否则禁用。 对于第一个SharedReference,此时“启用”按钮的值为空

如果有一个特定的时间间隔开始结束日期,我可以 只需对照当前时间进行检查,查看 按钮应该是。但是,用户可以简单地输入手机的日期 返回15分钟,以便继续启用该按钮

要避免这种情况,请设置一个

因为用户可能会重新启动设备或关闭应用程序

一旦设置了AlarmManager,关闭应用程序不会对其产生任何影响。但是,重新启动会产生影响。重新创建AlarmManager也有很多方法。简言之,您必须重新创建AlarmManager。但它不知道之前设置了什么时间。实现这一点的一种方法是,在设置AlarmManager的同时,将时间存储在共享首选项中r、 现在,您可以根据需要多次启动AlarmManager,因为您知道目标时间


一旦AlarmManager触发,只需从提供挂起的意图的活动/服务中启用/禁用有问题的按钮。

我将通过以下方式了解问题:

  • 启用按钮时,将当前时间存储在后端(以及设备的一些标识符)
  • 下次显示此活动时,请从数据库中读取
  • 比较存储的时间和当前时间
  • 确定按钮是否应启用的简单条件

  • 您尝试过alarmmanager吗?您可以存储上次处理完成的时间,然后将其与当前时间(DATETIME)进行比较。@AmitVaghela我们可以使用MVP吗?实际上不需要使用MVP,将这些日期时间数据保存到SharedReference。@AdityaVyas Lakhan
        //when use press button
        new Handler().postDelayed(new Runnable() {
    
                @Override
                public void run() {
                    //disable your button here
                }
            }, 3*1000); //your delay time