2017-03-27 71 views
2

下面是一個示例,我希望能夠在用戶操作後的一段有限時間(比如30分鐘)內啓用我的應用程序中的按鈕。 30分鐘後,該按鈕將再次被禁用。 什麼是最好的方式來實現這個在android中?在Android應用程序中的有限時間啓用按鈕

因爲用戶可能會重新啓動設備或關閉應用程序,我不能簡單地使用倒計時器。即使如此,由於存在特定的時間間隔開始日期,我可以簡單地檢查當前時間並查看按鈕的狀態。但是,用戶可以簡單地將手機的日期恢復爲15分鐘,以便繼續啓用按鈕。

+0

你試過alarmmanager嗎? – Okas

+0

您可以存儲完成上次處理的時間並將其與當前時間(DATETIME)進行比較。 –

+0

@AmitVaghela我們可以使用MVP嗎? –

回答

0

正常情況下

  • 按鈕變得可見
    1. 保存時間戳和時區信息在共享偏好
    2. 開始AlarmManager ,它會喚醒並清除共享首選項並禁用按鈕狀態。

情況下,當用戶關閉和打開該應用

  • Button獲取可見
  • 所有前面的步驟加在每次應用程序正在打開檢查共享首選項(如果有)和當前時間之間的差異,取決於顯示按鈕。

情況下,當用戶改變時間

  • Button獲取可見
  • 所有先前的步驟加登記在時間變化事件AndroidManifestsee how)並對SharedPreferences執行必要的操作,具體取決於改變了多少時間。

顯然,如果用戶清除應用程序的數據這種技術是沒用的,你必須執行與後端同步(Firebase Database也許?)。

1

例如,您可以每分鐘使用一次倒數計時器,然後將該進度保存在配置文件中。當用戶有30分鐘時,您可以禁用該按鈕。 您可以將配置文件寫入用戶無法觸摸的應用程序內部文件夾中。 如果用戶在7分鐘內關閉應用程序,則在您的配置文件中存在這7分鐘。如果用戶把響度單位的可以追溯到並不關心;)

0

使用System.currentTimeMillis()保存偏好開始時間,並且每次檢查當前時間(相同System.currentTimeMillis())是否已經過去30分鐘。

0

使用下面的代碼禁用30分鐘的按鈕。 btn。的setEnabled(假);

新主題(新的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(); 
1

這裏爲你做的最好的事情是使用寫您的按鈕的進度在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(); 
} 

這將在應用程序關閉和所有其他方案中的情況下工作。它只有在清除數據時纔會失敗。希望它有效:)

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 

希望它有幫助。

0

OnClick按鈕在sharedPreference中存儲當前時間。 當你回來檢查當前時間和sharedPref時間之間的差異。 如果超過30分鐘,則啓用其他功能則禁用。 對於第一sharedPreference值是空當時啓動按鈕

1

因爲有一個特定的時間間隔開始,結束日期,我可以 簡單地檢查對當前時間和看什麼 按鈕的狀態應該。但是,用戶可以簡單地將手機的日期 恢復爲15分鐘,以便繼續啓用該按鈕。

爲了避免這種情況,設置AlarmManager

因爲用戶可能會重新啓動設備或關閉應用

關閉一個應用程序不具有一旦設定了AlarmManager任何影響。然而,重新啓動。還有重新創建AlarmManager的ways。總之,你必須重新創建AlarmManager。但它沒有任何線索,它是什麼時候設置的。實現這一點的一種方法是,在設置AlarmManager的同時將時間存儲在共享首選項中。現在您可以根據需要多次觸發AlarmManager,因爲您知道目標時間。

一旦AlarmManager觸發,只需從Pending Intent提供的活動/服務啓用/禁用有問題的按鈕即可。

0

我會apprach以下列方式的部份問題:

  1. 當啓用按鈕,(有一些indentifier的設備一起)
  2. 下一次,本次活動是存儲當前的時間在後端顯示,從數據庫中讀取
  3. 將所存儲的時間和當前時間相比較。
  4. 確定是否啓用按鈕的簡單條件。
相關問題