在APP中定义一个时间(假设为5分钟),记录两次操作APP之间的时间间隔,如果大于之前定义的时间,则APP端实现发出命令,手机屏幕熄灭。该功能要如何实现?
PHP中文网2017-04-18 10:55:12
第一點是鎖定畫面這個功能吧,可以參考:https://github.com/chniccs/Lo...
這個小專案就是鎖定螢幕功能的實現,程式碼量很少。
另外一點就是看你怎麼定義每次操作,這裡將把一個activity顯示到前台當作一次操作,你也可以重寫觸摸監聽去定義一些觸摸操作為一次操作。
1、寫個BaseActivity,在onResume(這裡用這個代表一次操作)中發出一個延時訊息(廣播或者其它handler),並記錄當前時間(存儲在自定義Application中或者一個全域單例或者持久化存儲)
2、根據前面發送延遲訊息的方式,如廣播,在收到發出的廣播訊息後,取當前時間值與1 步驟中記錄的時間值進行比較,如果小於定義的時間值,則再次取兩次時間值(儲存的與目前的)的差值作為延時再發出一個廣播。當下次再收到廣播時,再進行判斷,如果大於等於時間值,就呼叫鎖定畫面。
說明:第2 步中為什麼要取差值而不是重新發一個固定延時的廣播,這是因為在第一次發送廣播後,可能你會進行一些操作,這些操作就後續的,也就是說當你收到延時廣播時,最後一次操作的時間並不是發送廣播時記錄的時間,而是真實最後一次操作的時間。所以每次操作後都需要對記錄的時間值進行更新操作。
差值計算:定義的無操作固定最大時間 - (當前時間 - 最後一次操作時間)
ringa_lee2017-04-18 10:55:12
採用Handler的postDelayed(Runnable, long)方法
1.定義一個Handler類別
Handler handler=new Handler();
Runnable runnable=new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
//要做的事情
handler.postDelayed(this, 2000);
}
};
2.啟動計時器
handler.postDelayed(runnable, 2000);
3.停止計時器
handler.removeCallbacks(runnable);
大概就是這麼一個路數吧,時間自己決定咯