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