java - 安卓實(shí)現(xiàn)熄屏功能。
問(wèn)題描述
在APP中定義一個(gè)時(shí)間(假設(shè)為5分鐘),記錄兩次操作APP之間的時(shí)間間隔,如果大于之前定義的時(shí)間,則APP端實(shí)現(xiàn)發(fā)出命令,手機(jī)屏幕熄滅。該功能要如何實(shí)現(xiàn)?
問(wèn)題解答
回答1:第一點(diǎn)是鎖屏這個(gè)功能吧,可以參考:https://github.com/chniccs/Lo...這個(gè)小項(xiàng)目就是鎖屏功能的實(shí)現(xiàn),代碼量很少。
另外一點(diǎn)就是看你怎么定義每次操作,這里將把一個(gè)activity顯示到前臺(tái)當(dāng)作一次操作,你也可以重寫觸摸監(jiān)聽去定義一些觸摸操作為一次操作。1、寫個(gè)BaseActivity,在onResume(這里用這個(gè)代表一次操作)中發(fā)出一個(gè)延時(shí)消息(廣播或者其它handler),并記錄當(dāng)前時(shí)間(存儲(chǔ)在自定義Application中或者一個(gè)全局單例或者持久化存儲(chǔ))2、根據(jù)前面發(fā)送延時(shí)消息的方式,如廣播,在收到發(fā)出的廣播消息后,取當(dāng)前時(shí)間值與 1 步中記錄的時(shí)間值進(jìn)行比較,如果小于定義的時(shí)間值,則再次取兩次時(shí)間值(存儲(chǔ)的與當(dāng)前的)的差值作為延時(shí)再發(fā)出一個(gè)廣播。當(dāng)下次再收到廣播時(shí),再進(jìn)行判斷,如果大于等于時(shí)間值,就調(diào)用鎖屏。
說(shuō)明:第 2 步中為什么要取差值而不是重新發(fā)一個(gè)固定延時(shí)的廣播,這是因?yàn)樵诘谝淮伟l(fā)送廣播后,可能你會(huì)進(jìn)行一些操作,這些操作就后續(xù)的,也就是說(shuō)當(dāng)你收到延時(shí)廣播時(shí),最后一次操作的時(shí)間并不是發(fā)送廣播時(shí)記錄的時(shí)間,而是真實(shí)最后一次操作的時(shí)間。所以在每次操作后都需要對(duì)記錄的時(shí)間值進(jìn)行更新操作。
差值計(jì)算:定義的無(wú)操作固定最大時(shí)間 - (當(dāng)前時(shí)間 - 最后一次操作時(shí)間)
回答2:采用Handler的postDelayed(Runnable, long)方法1.定義一個(gè)Handler類
Handler handler=new Handler(); Runnable runnable=new Runnable() { @Override public void run() { // TODO Auto-generated method stub //要做的事情 handler.postDelayed(this, 2000); } };
2.啟動(dòng)計(jì)時(shí)器
handler.postDelayed(runnable, 2000);
3.停止計(jì)時(shí)器
handler.removeCallbacks(runnable);
大概就是這么一個(gè)路數(shù)吧,時(shí)間自己決定咯
相關(guān)文章:
1. python - 如何統(tǒng)計(jì)一份英文 API 開發(fā)文檔(如 javadoc文檔)的詞頻?2. mysql優(yōu)化 - mysql 一張表如果不能確保字段列長(zhǎng)度一致,是不是就不需要用到char。3. python - oslo_config4. 請(qǐng)教一個(gè)mysql去重取最新記錄5. python - 請(qǐng)問(wèn)這兩個(gè)地方是為什么呢?6. python - 為什么match匹配出來(lái)的結(jié)果是<_sre.SRE_Match object; span=(0, 54), match=’’>7. javascript - 按鈕鏈接到另一個(gè)網(wǎng)址 怎么通過(guò)百度統(tǒng)計(jì)計(jì)算按鈕的點(diǎn)擊數(shù)量8. 人工智能 - python 機(jī)器學(xué)習(xí) 醫(yī)療數(shù)據(jù) 怎么學(xué)9. php - 有關(guān)sql語(yǔ)句反向LIKE的處理10. 大家都用什么工具管理mysql數(shù)據(jù)庫(kù)?
