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

时间:2017-03-27 12:06:51

标签: android

以下是一个示例,我希望能够在用户操作后的有限时间内(比如30分钟)在我的应用中启用按钮。 30分钟后,此按钮将再次被禁用。 在android中实现这一目标的最佳方法是什么?

因为用户可能会重启设备或关闭应用程序,所以我不能简单地使用倒数计时器。即便如此,鉴于有一个特定的时间间隔开始结束日期,我可以简单地检查当前时间,看看按钮的状态应该是什么。但是,用户可以简单地将手机的日期放回15分钟,这样按钮就会继续启用。

9 个答案:

答案 0 :(得分:2)

您可以使用Handler的postDelayed方法。见下文 -

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

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

希望有所帮助。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

这里最好的办法是使用CountDown计时器,在 PreferenceHelper 中写入按钮启用时间的进度。 定义一个间隔,比如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();
}

这将适用于app关闭和所有其他方案。只有在清除数据时它才会失败。希望它有效:)

答案 3 :(得分:1)

  

鉴于有一个特定的时间间隔开始结束日期,我可以   只需检查当前时间,看看状态如何   按钮应该是。但是,用户可以简单地说出手机的日期   回来15分钟,这样按钮就会继续启用。

要避免这种情况,请设置AlarmManager

  

因为用户可能会重启设备或关闭应用

关闭应用程序一旦设置就不会对AlarmManager产生任何影响。但是,重新启动。还有ways重新创建AlarmManager。简而言之,您可以再次创建AlarmManager。但它对之前设定的时间没有任何线索。实现此目的的一种方法是,将时间存储在共享首选项中,同时设置AlarmManager。现在您可以根据需要多次触发AlarmManager,因为您知道目标时间。

一旦AlarmManager触发,只需从Pending Intent提供的活动/服务中启用/禁用相关按钮。

答案 4 :(得分:0)

正常情况

  • 按钮可见
    1. 在共享偏好设置中保存时间戳和时区信息
    2. 启动AlarmManager,它将唤醒并清除共享首选项并禁用按钮状态。

案例,当用户关闭并打开应用

  • 按钮可见
    1. 所有之前的步骤以及每次打开应用时都会检查共享首选项中的值(如果有)与当前时间之间的差异,具体取决于显示按钮的时间。

用户更改时间的情况

  • 按钮可见
    1. 之前的所有步骤都会在AndroidManifestsee how)中注册时间更改事件,并根据时间的变化对SharedPreferences执行必要的操作。

显然,如果用户清除应用程序的数据,这种技术是无用的,你必须执行后端同步(Firebase Database也许??)。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

new Thread(new Runnable(){

        @Override
        public void run() {
            try {
                Thread.sleep(1800000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            LoginActivity.this.runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    btn.setEnabled(true);

                }
            });
        }
    }).start();

答案 7 :(得分:0)

OnClick按钮存储sharedPreference中的当前时间。 当你回来时检查当前时间和sharedPref时间之间的差异。 如果超过30分钟,则启用其他禁用。 对于第一个sharedPreference值,此时启用按钮

为null

答案 8 :(得分:0)

我会用以下方式评估这个问题:

  1. 启用按钮时,将当前时间存储在后端(以及设备的某些标识符)
  2. 下次显示此活动时,请从数据库
  3. 中读取
  4. Comapare存储的时间和当前时间。
  5. 确定是否应启用按钮的简单条件。