下面是一個示例,我希望能夠在用戶操作後的一段有限時間(比如30分鐘)內啓用我的應用程序中的按鈕。 30分鐘後,該按鈕將再次被禁用。 什麼是最好的方式來實現這個在android中?在Android應用程序中的有限時間啓用按鈕
因爲用戶可能會重新啓動設備或關閉應用程序,我不能簡單地使用倒計時器。即使如此,由於存在特定的時間間隔開始日期,我可以簡單地檢查當前時間並查看按鈕的狀態。但是,用戶可以簡單地將手機的日期恢復爲15分鐘,以便繼續啓用按鈕。
下面是一個示例,我希望能夠在用戶操作後的一段有限時間(比如30分鐘)內啓用我的應用程序中的按鈕。 30分鐘後,該按鈕將再次被禁用。 什麼是最好的方式來實現這個在android中?在Android應用程序中的有限時間啓用按鈕
因爲用戶可能會重新啓動設備或關閉應用程序,我不能簡單地使用倒計時器。即使如此,由於存在特定的時間間隔開始日期,我可以簡單地檢查當前時間並查看按鈕的狀態。但是,用戶可以簡單地將手機的日期恢復爲15分鐘,以便繼續啓用按鈕。
正常情況下
AlarmManager
,它會喚醒並清除共享首選項並禁用按鈕狀態。情況下,當用戶關閉和打開該應用
情況下,當用戶改變時間
AndroidManifest
( see how)並對SharedPreferences
執行必要的操作,具體取決於改變了多少時間。顯然,如果用戶清除應用程序的數據這種技術是沒用的,你必須執行與後端同步(Firebase Database也許?)。
例如,您可以每分鐘使用一次倒數計時器,然後將該進度保存在配置文件中。當用戶有30分鐘時,您可以禁用該按鈕。 您可以將配置文件寫入用戶無法觸摸的應用程序內部文件夾中。 如果用戶在7分鐘內關閉應用程序,則在您的配置文件中存在這7分鐘。如果用戶把響度單位的可以追溯到並不關心;)
使用System.currentTimeMillis()
保存偏好開始時間,並且每次檢查當前時間(相同System.currentTimeMillis()
)是否已經過去30分鐘。
使用下面的代碼禁用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();
這裏爲你做的最好的事情是使用寫您的按鈕的進度在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();
}
這將在應用程序關閉和所有其他方案中的情況下工作。它只有在清除數據時纔會失敗。希望它有效:)
你可以使用Handler的postDelayed方法。見下 -
//when use press button
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//disable your button here
}
}, 3*1000); //your delay time
希望它有幫助。
OnClick按鈕在sharedPreference中存儲當前時間。 當你回來檢查當前時間和sharedPref時間之間的差異。 如果超過30分鐘,則啓用其他功能則禁用。 對於第一sharedPreference值是空當時啓動按鈕
因爲有一個特定的時間間隔開始,結束日期,我可以 簡單地檢查對當前時間和看什麼 按鈕的狀態應該。但是,用戶可以簡單地將手機的日期 恢復爲15分鐘,以便繼續啓用該按鈕。
爲了避免這種情況,設置AlarmManager
因爲用戶可能會重新啓動設備或關閉應用
關閉一個應用程序不具有一旦設定了AlarmManager任何影響。然而,重新啓動。還有重新創建AlarmManager的ways。總之,你必須重新創建AlarmManager。但它沒有任何線索,它是什麼時候設置的。實現這一點的一種方法是,在設置AlarmManager的同時將時間存儲在共享首選項中。現在您可以根據需要多次觸發AlarmManager,因爲您知道目標時間。
一旦AlarmManager觸發,只需從Pending Intent提供的活動/服務啓用/禁用有問題的按鈕即可。
我會apprach以下列方式的部份問題:
你試過alarmmanager嗎? – Okas
您可以存儲完成上次處理的時間並將其與當前時間(DATETIME)進行比較。 –
@AmitVaghela我們可以使用MVP嗎? –