搜尋

首頁  >  問答  >  主體

java - 安卓实现熄屏功能。

在APP中定义一个时间(假设为5分钟),记录两次操作APP之间的时间间隔,如果大于之前定义的时间,则APP端实现发出命令,手机屏幕熄灭。该功能要如何实现?

迷茫迷茫2803 天前710

全部回覆(2)我來回復

  • PHP中文网

    PHP中文网2017-04-18 10:55:12

    第一點是鎖定畫面這個功能吧,可以參考:https://github.com/chniccs/Lo...
    這個小專案就是鎖定螢幕功能的實現,程式碼量很少。

    另外一點就是看你怎麼定義每次操作,這裡將把一個activity顯示到前台當作一次操作,你也可以重寫觸摸監聽去定義一些觸摸操作為一次操作。
    1、寫個BaseActivity,在onResume(這裡用這個代表一次操作)中發出一個延時訊息(廣播或者其它handler),並記錄當前時間(存儲在自定義Application中或者一個全域單例或者持久化存儲)
    2、根據前面發送延遲訊息的方式,如廣播,在收到發出的廣播訊息後,取當前時間值與1 步驟中記錄的時間值進行比較,如果小於定義的時間值,則再次取兩次時間值(儲存的與目前的)的差值作為延時再發出一個廣播。當下次再收到廣播時,再進行判斷,如果大於等於時間值,就呼叫鎖定畫面。

    說明:第2 步中為什麼要取差值而不是重新發一個固定延時的廣播,這是因為在第一次發送廣播後,可能你會進行一些操作,這些操作就後續的,也就是說當你收到延時廣播時,最後一次操作的時間並不是發送廣播時記錄的時間,而是真實最後一次操作的時間。所以每次操作後都需要對記錄的時間值進行更新操作。

    差值計算:定義的無操作固定最大時間 - (當前時間 - 最後一次操作時間)

    回覆
    0
  • ringa_lee

    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); 
    

    大概就是這麼一個路數吧,時間自己決定咯

    回覆
    0
  • 取消回覆