android怎麼實現後台對按鍵事件的監控

2021-03-03 23:38:26 字數 5177 閱讀 6651

1樓:匿名使用者

為了實現鍵盤的監控,從新開發乙個輸入法是不現實的,一般的操作就是在系統的輸入法機制中新增介面**。我們知道,再應用程式中拿到按鍵的**一般是監聽onkeydown的介面

public boolean onkeydown(int keycode, keyevent event)

開發者就可以根據**方法中的引數, keycode與keyevent來判斷具體事件。但是,由於事件的**機制在其的沙箱中執行,在其他應用中是無法拿到當前應用事件**的。

那麼我們就從上到下,具體的看看事件的傳遞機制。如下圖所示,使用者點選後,軟鍵盤或物理按鍵的輸入驅動就會產生乙個中斷,且向/dev/input/event*中寫入乙個相應的訊號量。android作業系統則會迴圈的讀取其中的事件,再分發給windowmanagerserver。

由windowmanagerserver根據事件的**分發到各個不同的viewgroup與view中,從而產生不同的onclick、onkeydown和ontouch等事件。

這個時候很自然的想到,黑客們希望做鍵盤監控,一定會向linux底層增加自定義的事件。這裡我們使用的是linux中的getevent獲得/dev/input/eventx裝置匯報的事件,這個命令還會輸出所有event裝置的基本資訊。包括觸屏、按鍵、耳機插入等等。

其基本用法如下:

usage: getevent [-t] [-n] [-sswitchmask] [-s] [-v [mask]] [-d] [-p] [-i] [-l] [-q] [-c count] [-r] [device]

-t: show time stamps

-n: don't print newlines

-s: print switch states for given bits

-s: print all switch states

-v: verbosity mask (errs=1, dev=2, name=4, info=8, vers=16, pos. events=32,props=64)

-d: show hid descriptor, if available

-p: show possible events (errs, dev, name, pos. events)

-i: show all device info and possible events

-l: label event types and names in plain text

-q: quiet (clear verbosity mask)

-c: print given number of events then exit

-r: print rate events are received

鍵入getevent後,我們能夠看到裝置中的一些列輸入硬體驅動資訊,同樣下面會出現很多輸入指令訊號,通常情況下,這些訊號量都在刷屏

這些訊號量的表示我們無法直接看懂,輸入getevent –l加入label我們能夠看到一些新增的標籤,如下所示:

其實這些lable已經在其input.h標頭檔案中定義好,其中type的定義如下:

/** event types

*/#define ev_syn 0x00

#define ev_key 0x01

#define ev_rel 0x02

#define ev_abs 0x03

#define ev_msc 0x04

#define ev_sw 0x05

#define ev_led 0x11

#define ev_snd 0x12

#define ev_rep 0x14

#define ev_ff 0x15

#define ev_pwr 0x16

#define ev_ff_status 0x17

#define ev_max 0x1f

#define ev_**t (ev_max+1)

一般來說,常用的是ev_key、ev_rel、ev_abs、ev_syn,分別對應鍵盤按鍵、相對座標、絕對座標、同步事件。ev_syn則表示一組完整事件已經完成,需要處理,ev_syn的code定義事件分發的型別。

android怎麼實現後台對按鍵事件的監控

2樓:08物理

為了實現鍵盤的監控,從新開發乙個輸入法是不現實的,一般的操作就是在系統的輸入法機制中新增介面**。我們知道,再應用程式中拿到按鍵的**一般是監聽onkeydown的介面,如下所示:

public boolean onkeydown(int keycode, keyevent event)

開發者就可以根據**方法中的引數, keycode與keyevent來判斷具體事件。但是,由於事件的**機制在其的沙箱中執行,在其他應用中是無法拿到當前應用事件**的。

那麼我們就從上到下,具體的看看事件的傳遞機制。如下圖所示,使用者點選後,軟鍵盤或物理按鍵的輸入驅動就會產生乙個中斷,且向/dev/input/event*中寫入乙個相應的訊號量。android作業系統則會迴圈的讀取其中的事件,再分發給windowmanagerserver。

由windowmanagerserver根據事件的**分發到各個不同的viewgroup與view中,從而產生不同的onclick、onkeydown和ontouch等事件。

這個時候很自然的想到,黑客們希望做鍵盤監控,一定會向linux底層增加自定義的事件。這裡我們使用的是linux中的getevent獲得/dev/input/eventx裝置匯報的事件,這個命令還會輸出所有event裝置的基本資訊。包括觸屏、按鍵、耳機插入等等。

其基本用法如下:

usage: getevent [-t] [-n] [-sswitchmask] [-s] [-v [mask]] [-d] [-p] [-i] [-l] [-q] [-c count] [-r] [device]

-t: show time stamps

-n: don't print newlines

-s: print switch states for given bits

-s: print all switch states

-v: verbosity mask (errs=1, dev=2, name=4, info=8, vers=16, pos. events=32,props=64)

-d: show hid descriptor, if available

-p: show possible events (errs, dev, name, pos. events)

-i: show all device info and possible events

-l: label event types and names in plain text

-q: quiet (clear verbosity mask)

-c: print given number of events then exit

-r: print rate events are received

鍵入getevent後,我們能夠看到裝置中的一些列輸入硬體驅動資訊,同樣下面會出現很多輸入指令訊號,通常情況下,這些訊號量都在刷屏,如下圖所示:

這些訊號量的表示我們無法直接看懂,輸入getevent –l加入label我們能夠看到一些新增的標籤,如下所示:

其實這些lable已經在其input.h標頭檔案中定義好,其中type的定義如下:

/** event types

*/ #define ev_syn          0x00

#define ev_key          0x01

#define ev_rel          0x02

#define ev_abs          0x03

#define ev_msc          0x04

#define ev_sw           0x05

#define ev_led          0x11

#define ev_snd          0x12

#define ev_rep          0x14

#define ev_ff           0x15

#define ev_pwr          0x16

#define ev_ff_status       0x17

#define ev_max          0x1f

#define ev_**t         (ev_max+1)

一般來說,常用的是ev_key、ev_rel、ev_abs、ev_syn,分別對應鍵盤按鍵、相對座標、絕對座標、同步事件。ev_syn則表示一組完整事件已經完成,需要處理,ev_syn的code定義事件分發的型別。

3樓:謊言如此動聽

|遙控器按鍵事件這個不是在android原始碼的bootable下面ircon.c配置的麼。比如:

,遙控器按鍵編號是「 0x0b」,給他的響應是「key_up」,就是方向鍵的下,這個是在原始碼裡邊配置的。你必須要有遙控器的書名數,知道遙控器每個按鍵的編號,然後對應給他相應的響應才可以。

但是你要操控手機,你的手機必須要能接受遙控器訊號,這個也是要硬體支援的,一般的手機貌似都沒有這個。

這個遙控的響應操作是驅動層做的,和應用層沒什麼關係,主要是驅動和硬體的支援。

android是一種基於linux的自由及開放源**的作業系統,主要使用於移動裝置,如智慧型手機和平板電腦,由google公司和開放手機聯盟領導及開發。尚未有統一中文名稱,中國大陸地區較多人使用「安卓」或「安致」。

android作業系統最初由andy rubin開發,主要支援手機。2023年8月由google收購注資。2023年11月,google與84家硬體製造商、軟體開發商及電信營運商組建開放手機聯盟共同研發改良android系統。

隨後google以apache開源許可證的授權方式,釋出了android的源**。第一部android智慧型手機釋出於2023年10月。android逐漸擴充套件到平板電腦及其他領域上,如電視、數位相機、遊戲機等。

2023年3月,android全球網路流量和裝置超越microsoft windows,正式成為全球第一大作業系統。2023年8月,android o釋出。

android臨摹寫字打分怎麼實現

android layout width fill parent android layout height fill parent 練習寫字,臨摹字帖,得練多長時間才能把字寫好啊?堅持就是勝利,我不知道你說的好,是哪個程度的,如果要想看起來比較養眼的話大概也的兩三個月吧。人生的追求永無止境,不要最...

jquery怎麼實現移動端手指滑動事件

一 原理及實現方法如下 1 當開始乙個touchstart事件的時候,獲取此刻手指的橫座標startx和縱座標starty 2 當觸發touchmove事件時,在獲取此時手指的橫座標moveendx和縱座標moveendy 最後,通過這兩次獲取的座標差值來判斷手指在手機螢幕上的滑動方向。二 注意 手...

對秦始皇焚書坑儒事件怎麼看待,對秦始皇焚書坑儒的看法

從焚書坑儒事件,從而證明秦始皇是 個暴君,為了保主自已權位,殺了文 人,造成文人生活淒涼 秦始皇焚書坑儒。是對當時老百姓思想的麻痺。老百姓有求知的權利。可是統治者為了統治自己的國家,剝奪了這種權利。使我國的文化資源遭到了極大的浪費。秦時代重視的是法家。以法治國。而作為當時的儒派學者反對秦國制定的郡縣...