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. boot2docker無(wú)法啟動(dòng)2. docker-compose中volumes的問(wèn)題3. 關(guān)docker hub上有些鏡像的tag被標(biāo)記““This image has vulnerabilities””4. nignx - docker內(nèi)nginx 80端口被占用5. docker安裝后出現(xiàn)Cannot connect to the Docker daemon.6. javascript - mock.js可以存儲(chǔ)數(shù)據(jù)嗎7. java - SSH框架中寫分頁(yè)時(shí)service層中不能注入分頁(yè)類8. golang - 用IDE看docker源碼時(shí)的小問(wèn)題9. docker api 開發(fā)的端口怎么獲???10. dockerfile - 為什么docker容器啟動(dòng)不了?

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