三種方法去監控android 系統中是否有按鍵操作

有時候我們會遇到這樣一個需求:

需要在用戶無操作的幾分鐘之後去彈出一個頁面或者去做一些操作。例如屏保,或者手機無操作息屏(當然這兩種可能不是使用的我以下介紹的方法。但是我覺得完全可以使用這兩種方法去實現)
哦,對了,以下幾種方法都是針對TV上監控有無遙控器按鍵的,至於手機之類的觸摸事件,大家可以舉一反三。

方法一

使用 串口命令getevent

大家有用過串口調試過android 系統的,可能都知道,我們在串口中輸入getevent 命令,那麼此時如果我們去按遙控器按鍵,這時會有打印出來來反饋你是按了那個按鍵。故按照這個思路。我們可以寫一個死循環,不斷的去監聽是否有打印出來,如果隔一段時間沒有打印出來,就開始執行我們需要執行的動作。
至於在代碼中如何去執行linux 命令,可以參考以下:

exec=Runtime.getRuntime().exec("getevent");
InputStream inputStream = exec.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

方法二

使用android 輔助功能 AccessibilityService

可以參考下面這篇:
輔助服務監聽系統按鍵(AccessibilityService最簡實例)

方法三

通過監控phoneWindowManager

當然這種方法是針對在有系統源碼的基礎上說的。熟悉android 的事件分發機制的,應該都知道,我們的按鍵事件都會在framework的phoneWindowManager.java 中先接收到。具體方法是:

 public long interceptKeyBeforeDispatching(WindowState win, KeyEvent event, int policyFlags)

故我們可以在這個方法裏面來判斷是否一直有按鍵被按,也就是這個方法是否一直有被執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章