模拟ADB终端的按键组合

时间:2014-10-05 16:35:07

标签: android shell adb keyevent tasker

我想发送" CTRL + W "到Chrome for Android关闭活动标签。我尝试了很多东西,但从终端实现它并没有成功。 (如果我使用OTG连接USB键盘,我可以用CTRL + W关闭选项卡)

首先,我不想为此编写应用程序,我只想要一个shell命令来从Tasker中使用它。

我在某个地方读到了这个(CTRL + W按键),我必须像这样模拟按键:

向下CTRL
下来W
向上W CTRL

要从终端实现这一目标,我似乎必须使用" sendevent "。

我可以使用" sendevent"模拟所有硬件按键。但不能用它来模拟普通键。

例如,向下和向上到POWER键:

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

我使用此命令,但我无法使用此命令发送普通键。 (例如a,b,c等)

event1是gpio-keys,所以我正在使用它。所有其他输入事件都是传感器,其中一个是充电驱动器。 (max77693-MUIC)

" getevent -p"的输出说:

add device 1: /dev/input/event9
  name:     "compass_sensor"
  events:
    REL (0002): 0000  0001  0002  0003  0004  0005  0006  0007 
                0008  0009 
  input props:
    <none>
add device 2: /dev/input/event6
  name:     "barometer_sensor"
  events:
    REL (0002): 0000  0001  0002 
  input props:
    <none>
add device 3: /dev/input/event5
  name:     "light_sensor"
  events:
    REL (0002): 0000  0001  0002  0009 
  input props:
    <none>
add device 4: /dev/input/event4
  name:     "proximity_sensor"
  events:
    ABS (0003): 0019  : value 1, min 0, max 1, fuzz 0, flat 0, resolution 0
  input props:
    <none>
add device 5: /dev/input/event3
  name:     "gyro_sensor"
  events:
    REL (0002): 0003  0004  0005 
  input props:
    <none>
could not get driver version for /dev/input/mice, Not a typewriter
add device 6: /dev/input/event7
  name:     "Midas_WM1811 Midas Jack"
  events:
    KEY (0001): 0072  0073  00e2 
    SW  (0005): 0002  0004 
  input props:
    <none>
add device 7: /dev/input/event1
  name:     "gpio-keys"
  events:
    KEY (0001): 0072  0073  0074  00ac 
  input props:
    <none>
add device 8: /dev/input/event0
  name:     "max77693-muic"
  events:
    KEY (0001): 0072  0073  00a3  00a4  00a5 
  input props:
    <none>
add device 9: /dev/input/event8
  name:     "sec_touchkey"
  events:
    KEY (0001): 008b  009e 
    LED (0011): 0008 
  input props:
    <none>
add device 10: /dev/input/event2
  name:     "sec_touchscreen"
  events:
    ABS (0003): 002f  : value 0, min 0, max 9, fuzz 0, flat 0, resolution 0
                0030  : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
                0031  : value 0, min 0, max 255, fuzz 0, flat 0, resolution 0
                0032  : value 0, min 0, max 30, fuzz 0, flat 0, resolution 0
                0035  : value 0, min 0, max 719, fuzz 0, flat 0, resolution 0
                0036  : value 0, min 0, max 1279, fuzz 0, flat 0, resolution 0
                0039  : value 0, min 0, max 65535, fuzz 0, flat 0, resolution 0
                003c  : value 0, min -90, max 90, fuzz 0, flat 0, resolution 0
                003d  : value 0, min 0, max 1, fuzz 0, flat 0, resolution 0
  input props:
    INPUT_PROP_DIRECT

我的gpio-keys布局文件&#34; /system/usr/keylayout/gpio-keys.kl"像这样:

key 115   VOLUME_UP         WAKE
key 114   VOLUME_DOWN       WAKE
key 116   POWER             WAKE
key 172   HOME              WAKE

我可以发送所有正常的keyevents:

"input keyevent KEYCODE_X" 

并发送多个:

"input keyevent KEYCODE_X KEYCODE_Y"

你应该认为它可以这样工作:

"input keyevent KEYCODE_CTRL_LEFT KEYCODE W"

但是关键事件立即向上和向上,我不能用它来发送CTRL + W组合。

我知道,答案应该是&#34; sendevent&#34;。但我找不到。

我还尝试将一些假密钥添加到密钥布局文件中,如下所示:

key 115   VOLUME_UP         WAKE
key 114   VOLUME_DOWN       WAKE
key 116   POWER             WAKE
key 172   HOME              WAKE
key 19    Q

我重新启动了手机,然后尝试了:

sendevent /dev/input/event1 1 19 1
sendevent /dev/input/event1 0 0 0
sendevent /dev/input/event1 1 19 0
sendevent /dev/input/event1 0 0 0

但它从未写过&#34; Q&#34;进入任何文本框。

请帮助,谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

哦,是的!!我不知道为什么但是每当我感到困难时,我都会来到stackoverflow,一旦我开始写这个问题,我就会找到答案...... xD 无论如何,我能够通过以下程序来做到这一点:

  1. 转至/ system / usr / keylayout /
  2. 在我的情况下,没有gpio-keys,反正打开 Generic.kl
  3. 它具有模拟任何内容所需的所有密钥代码...例如CTRL_RIGHT密钥代码为97而W密钥代码为17
  4. 这就是你所需要的,现在开放的任务 - &gt;新任务 - &gt;添加等待5秒 - &gt;运行shell: input keyevent 97 input keyevent 17
  5. 现在运行命令并快速打开chrome,瞧!在5秒内你会看到你的标签消失!

    希望能帮助所有未来的任务专家;)

    荣誉......

答案 1 :(得分:0)

events输出中的getevent -p部分列出了所有已接受的密钥代码:

add device 7: /dev/input/event1
  name:     "gpio-keys"
  events:
    KEY (0001): 0072  0073  0074  00ac 

即。在VOLUME_UP的情况下VOLUME_DOWN(0x73),POWER(0x72),HOME(0x74)和/dev/input/event1(0xAC)。 Linux内核输入驱动程序在到达Android框架(您尝试修改的布局文件的位置)之前很久就会过滤掉所有其他内容。