2013-01-02 425 views

回答

0

不知道這是否會工作,但(我假設你是從應用程序做到這一點),你可以有一系列AsyncTasks同時運行(並寫入/ dev/uinput)來模擬同步觸摸

2

您可以在google代碼上使用事件注入器庫:http://code.google.com/p/android-event-injector/,爲您的觸摸屏設置均勻監視器,並準確查看發送/用於多點觸控事件的消息。

然後,您可以使用正確的參數簡單地重現這些消息。

4

以我的經驗,/dev/uinput觸摸手勢將是艱難的。我實現了單點觸控,僅在某些設備上工作。在其他方面,它只會產生「懸停」的效果。

然後我使用了android的觸控設備/dev/input/eventX(如果您有root權限,您可以使用它)。查看觸摸輸入如何工作的最佳方法是在設備上使用getevent /dev/input/eventX二進制文件。 linux multitouch protocol輸入描述了多點觸控功能和行爲,並且給出了很好的背景知識,在解碼十六進制代碼(並將它們翻譯爲更有意義的內容,例如ABS_MT_POSITION_X)後,您將看到的內容是getevent

簡而言之:

  1. 找出/dev/input/eventX設備中的哪一個的觸摸輸入裝置。它是註冊ABS_MT_ *事件的設備。你可以看到getevent -il命令(運行於adb shell
  2. 假設支持這種事件的輸入設備是/dev/input/event2
  3. 問題getevent /dev/input/event2命令從adb shell並觸摸屏幕。
  4. 你會在屏幕上得到一些輸出,其中包含三列:
    1. 事件類別(EV_ABS,這是0003
    2. 事件代碼(ABS_MT_SLOT這是0x002f
    3. 事件值(即插槽數字,座標,壓力或任何事件定義)
  5. 看看這些事件是怎麼樣的,然後只是重放它們,你可以用這種方式注入多點觸摸事件和手勢

對於instace,對於雙抽頭的getevent /dev/input/event2註釋輸出:

0003 002f 00000001 // slot 1 (finger 1) 
0003 0039 000019fe // tracking id for slot 1 
0003 0035 00000146 // position x 
0003 0036 00000117 // position y 
0003 0030 00000033 // touch area 
0000 0000 00000000 // sync 
0003 002f 00000000 // slot 0 (finger 0) 
0003 0039 000019ff // tracking id for slot 0 
0003 0035 000000cb // position x 
0003 0036 00000164 // position y 
0003 0030 00000028 // touch area 
0000 0000 00000000 // sync 
0003 0039 ffffffff // relese finger 0 
0000 0000 00000000 // sync 
0003 002f 00000001 // slot 1 
0003 0039 ffffffff // release finger 1 
0000 0000 00000000 // sync