Android ADB Shell sendevent 不工作

Android ADB Shell sendevent 不工作

我想Samsung Galaxy Tab 2 GT-P5100使用 ADB shell 模擬在已 root 運行的 Android 4.0.4 上按下電源按鈕。

為此,我使用以下方法更改了相關權限:

adb shell
su
chmod 666 /dev/input/event1

我如何知道這是否成功?

我認為以下命令會顯示鎖定畫面:

input keyevent 116

我沒有收到任何錯誤,但什麼也沒有發生...

或者,我使用關鍵程式碼的文字形式,如下所示:

input keyevent KEY_POWER

在這種情況下,輸出是Killed-這是什麼意思?

最後,我嘗試過:

sendevent dev/input/event1 1 116 1 ; sendevent dev/input/event1 1 116 0

運氣不好:(

我究竟做錯了什麼?

getevent -i /dev/input/event1

輸出以下內容:

add device 1: /dev/input/event1
  bus:      0000
  vendor:   0000
  product:  0000
  version:  0000
  name:     "sec_key"
  location: ""
  id:       ""
  version:  1.0.1
  events:
    KEY (0001):  0072  0073  0074
  input props:
    <none>

密鑰0074有文字標籤KEY_POWER

答案1

按下電源按鈕由幾個事件組成。您可以輸入命令來檢查:

adb shell getevent -l

然後按電源按鈕。在 Nexus 5 模擬器上的結果是:

/dev/input/event0: EV_KEY KEY_POWER   DOWN                
/dev/input/event0: EV_SYN SYN_REPORT  00000000            
/dev/input/event0: EV_KEY KEY_POWER   UP                  
/dev/input/event0: EV_SYN SYN_REPORT  00000000 

觸摸事件輸入檔案 /dev/input/event 可以因裝置而異。在本例中是 event0。

在將事件寫入裝置之前,您必須變更觸控事件檔案的模式:

adb shell
chmod 666 /dev/input/event0

所有鍵的定義可以在 http://androidxref.com/4.4_r1/xref/prebuilts/ndk/6/platforms/android-9/arch-arm/usr/include/linux/input.h

sendevent 鍵的值應該是小數

要模擬按下電源按鈕,您必須編寫所有這些事件:

adb shell sendevent /dev/input/event0 1  116  108                
adb shell sendevent /dev/input/event0 0  0    0            
adb shell sendevent /dev/input/event0 1  116  103                  
adb shell sendevent /dev/input/event0 0  0    0 

我在 Nexus 5 模擬器上進行了測試,它可以工作。

答案2

因為你沒有以正確的方式發送。僅發送是不夠的

sendevent dev/input/event1 1 116 1 ; sendevent dev/input/event1 1 116 0

請嘗試下面的一個;)

sendevent dev/input/event1 1 116 1 ; sendevent dev/input/event1 0 0 0 ;sendevent dev/input/event1 1 116 0 ;sendevent dev/input/event1 0 0 0

相關內容