java - 安卓實(shí)現(xiàn)熄屏功能。
問題描述
在APP中定義一個時間(假設(shè)為5分鐘),記錄兩次操作APP之間的時間間隔,如果大于之前定義的時間,則APP端實(shí)現(xiàn)發(fā)出命令,手機(jī)屏幕熄滅。該功能要如何實(shí)現(xiàn)?
問題解答
回答1:第一點(diǎn)是鎖屏這個功能吧,可以參考:https://github.com/chniccs/Lo...這個小項(xiàng)目就是鎖屏功能的實(shí)現(xiàn),代碼量很少。
另外一點(diǎn)就是看你怎么定義每次操作,這里將把一個activity顯示到前臺當(dāng)作一次操作,你也可以重寫觸摸監(jiān)聽去定義一些觸摸操作為一次操作。1、寫個BaseActivity,在onResume(這里用這個代表一次操作)中發(fā)出一個延時消息(廣播或者其它handler),并記錄當(dāng)前時間(存儲在自定義Application中或者一個全局單例或者持久化存儲)2、根據(jù)前面發(fā)送延時消息的方式,如廣播,在收到發(fā)出的廣播消息后,取當(dāng)前時間值與 1 步中記錄的時間值進(jìn)行比較,如果小于定義的時間值,則再次取兩次時間值(存儲的與當(dāng)前的)的差值作為延時再發(fā)出一個廣播。當(dāng)下次再收到廣播時,再進(jìn)行判斷,如果大于等于時間值,就調(diào)用鎖屏。
說明:第 2 步中為什么要取差值而不是重新發(fā)一個固定延時的廣播,這是因?yàn)樵诘谝淮伟l(fā)送廣播后,可能你會進(jìn)行一些操作,這些操作就后續(xù)的,也就是說當(dāng)你收到延時廣播時,最后一次操作的時間并不是發(fā)送廣播時記錄的時間,而是真實(shí)最后一次操作的時間。所以在每次操作后都需要對記錄的時間值進(jìn)行更新操作。
差值計算:定義的無操作固定最大時間 - (當(dāng)前時間 - 最后一次操作時間)
回答2:采用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);
大概就是這么一個路數(shù)吧,時間自己決定咯
相關(guān)文章:
1. docker-compose中volumes的問題2. 我在centos容器里安裝docker,也就是在容器里安裝容器,報錯了?3. 在windows下安裝docker Toolbox 啟動Docker Quickstart Terminal 失敗!4. docker-machine添加一個已有的docker主機(jī)問題5. golang - 用IDE看docker源碼時的小問題6. docker不顯示端口映射呢?7. javascript - 連續(xù)點(diǎn)擊觸發(fā)mouseleave事件8. 關(guān)docker hub上有些鏡像的tag被標(biāo)記““This image has vulnerabilities””9. docker內(nèi)創(chuàng)建jenkins訪問另一個容器下的服務(wù)器問題10. mac里的docker如何命令行開啟呢?

網(wǎng)公網(wǎng)安備