When using Tasker, sometimes we want to do some automation on screen e.g. screen or button taps.

At present, there are some ways can reach it. 
1."Input" action

We can use actions in "Input" category(especially "Dpad" action and "type" Action) to do some simple click/tap.

An example: http://tasker.wikidot.com/auto-usb-mass-storage

Auto USB mass storage when connected
With Tasker, use a trick to automatically enable USB mass storage when USB cable plugged.

Require:
- Android 2.3+
- USB debbuging off
- In fact, the button “Turn on USB storage” must show up when USB cable plugged. Download this file Otherwise, you can create the profile yourself with the following steps: Click New and select State
Select Hardware Action then USB plugged
Click + in the bottom left to add an action
Select category Task and Wait
Set ms and press Done
Click + in the bottom left to add an action
Select category Input and DPad
Set Button Down and press done
Click + in the bottom left to add an action
Select category Input and DPad
Set Button Press and press done
Click + in the bottom left to add an action
Select category Task and Wait
Set ms and press Done
Click + in the bottom left to add an action
Select category Input and DPad
Set Button Right and press done
Click + in the bottom left to add an action
Select category Input and DPad
Set Button Press only If %WIN ~ Turn off USB storage < replace it with your langage Explanation:
Tasker simulates a tap on the button “Turn on USB storage” when it appears.
2. Use script

Use some type of Script to do this. Yes, script may be the best solution for automation.

Be careful! Sleep values might need some tweaking!  
  
  2.1 Monkey Script
 
Did you remember the "typewriter monkeys" theory? Certainly, the monkey immigrant to Android now.
You can reference Android Develop Document for details if you want know parameters of monkey script.
Or you can use the app named "Action Box"(Tasker plugin) directly.
It providers a somehow "IDE" for monkey script.
     You may need to calculate the coordinate in screen. It's so hard.

In order to get the correct coordinates, on your device go to Settings -> dev options and turn on "show pointer location" then you can go into your app and tap on the correct location and it will display the x/y coordinates of the tap which you can input on that script.

Some docs about the monkey tool>>>.

2.2 "Input" command in shell

With "input" command in shell, we can simulate keypress event on Android. The keycode sucks!

More info about "Input" command, here.

  2.3 Sendevent and Getevent command in Shell 

Android shell support sendevent and getevent command to grab and generate tap/swipe events on screen.

So we can make a way to do this. The method "listens" to your input actions (screen taps, button presses, etc)

and turns them into a script you can use to reproduce them.

Think of it as something similar to Excel's Macro Recording feature.

Of course, you need have knowledge of basic screen events(refer to tutorial).

TUTORIAL: Remote Control Touch Screen

Solution 1:

1. run getevent ini adb shell
2. copy/paste it's output to file on PC
3. run script which contents one line cat $1 | gawk --non-decimal-data '{print $1, ("0x"$2)+0, ("0x"$3)+0, ("0x"$4)+0}' | sed 's/://g;s/^/sendevent /g' as convert.sh file.in > file out
4. put file.out on SD-card
5. Source it with Run Shell action
 

Note: the solution comes from here. Thanks to Vladimir Oz .

Solution 2:

You can use "Sendevent->Getevent Toolbox" to find a way out.

Simulating keypress events on Android

Modern day smart-phones have already begun to migrate from the traditional "a-button-for-every-need" approach to the "huge-display-cum-touchscreen" form-factors. Android phones  are no exception. But, traditional buttons are still reqd. for a few oft used functions (power,back,home,menu etc.) And smart-phones continue to have them alongwith the primary touch-based-UI.
 
Android-OS provides a very easy method to simulate key/button press/release events via software. You might ask why do we need a software to generate the events when a hardware button is already present on the device. Here's why:
  • During development/testing of the button-drivers itself.
  • To implement automated rigorous tests. ( MonkeyTest? )
  • To implement/interface additional custom software keyboards.
  • Just because we can!
The reason why i am doing it today is REASON NUMBER 4.
 
Now, the basic goal of this exercise is extremely simple:
Q. How to generate a hardware-button-press event
WITHOUT actually pressing any key on the device?

Let us first understand what happens when a hardware button is pressed. Here is what happens when you press a button on an Android device:

  1. The h/w button triggers an interrupt.
  2. The ISR of the corresponding driver gets called (in kernel).
  3. In the ISR, the driver generates an input-event.
  4. Android-framework (in userspace) gets the notification of the event.
  5. Android reads the input-event code & type.
  6. Compares it with the proper "keymap/keylayout" file.
  7. The proper button is identified.
To simulate button presses we enter this procedure at STEP3.
Instead of the regular driver generating the input-event, we generate an input-event ourselves using a pre-built userspace binary. This will then be notified to the Android-framework and the rest continues as above.
 
So now all depends on the the pre-built userspace binary, which is...
[ drum-roll... ]
...Input. (How convenient!) The syntax of input is as follows:
input keyevent <event_code>

Now, before we try to send any keyevent, we need to find out the event-code that maps to the h/w key we want to simulate.

The following table summarizes all the supported keycodes in Android:

Additionally we can look up the keylayout (.kl) file on the device. Personally, I find keylayout a misnomer, as we are not talking about different keyboards here, but different mappings of an input-event-value to its functionality.
 
Anyways you can always find the file in system/usr/keylayout/xyz.kl
NOTE: For each keyboard device xyz, the android.keylayout.xyz system property must be set. If a keylayout file is not specified, Android will default to/system/usr/keylayout/qwerty.kl
 
Now to generate a event of a specific keycode, we simply execute this on the terminal/serial console:
input keyevent <keycode>

The value of keycode can be any of the integer values from the above table.

In case a serial-console is NOT available on your device, you can always run the command via adb as follows:

adb shell input keyevent <keycode>

That's how a hardware-button-press is simulated in software!!

simulate screen tap with tasker

run shell -> input tap x y  -> ensure use root is ticked
x y are the coordinates (activate them to show on screen in developer menu in settings)

run shell -> input tap 500 500

run shell -> input swipe 500 500 500 800

run shell -> input swipe 500 500 500 500 s

Emulating touch in Android is apparently possible with shell commands, using Tasker’s Run Shell action.

The command you use is

input tap x y

Where X and Y are coordinates. Root must be checked in the action options, and obviously Tasker needs root access to do this.

As for how you find X and Y, that’s easy:

Go to system settings, developer options, and enable “Show pointer location”.

Use that option to find the X and Y coordinates of whatever you need the touch emulation to press, and write them down.

Then use them in the above command.

You can also emulate swipes, using the following command:

input swipe X1 Y1 X2 Y2

Where X1 Y1 are the star coordinates and X2 Y2 are the end coordinates.

As an example, “input swipe 400 400 100 400″ on my phone swipes the image thumbnails in a Google Play listing.

This works great on my device, but might be dependent on device and/or OS version/ROM.

For long tap use , using the following command:

input swipe x1 y1 x2 y2 s

Set x1 and x2 to the same value and y1 and y2 to the same value to keep your swipe in the same place and set s to the number of milliseconds you want your long press to last.

TIP:

don't forget to turn off the "Show Pointer Location" and "Show Touches" BEFORE running the task.

That caused several reboots for me. Oops!

This is fantastic, only issue I'm having is that it doesn't seem to work with the screen off.. maybe if I remove keyguard?

yeah, have to wake disable key guard/ disable pattern lock, run the emulation,

enable keyguard/enable pattern lock, but totally worth it

Automate Screen or Button Taps via Tasker : Simulating keypress events的更多相关文章

  1. Simulating Mouse Events in JavaScript

    http://marcgrabanski.com/simulating-mouse-click-events-in-javascript/

  2. Content portal for Pocketables Tasker articles

    http://www.pocketables.com/2013/03/overview-of-pocketables-tasker-articles.html I write a lot about ...

  3. man screen

    http://www.gnu.org/software/screen/manual/screen.html Screen User's Manual Next: Overview, Previous: ...

  4. How To Make A Swipeable Table View Cell With Actions – Without Going Nuts With Scroll Views

    How To Make A Swipeable Table View Cell With Actions – Without Going Nuts With Scroll Views  Ellen S ...

  5. bootstrap-modal 学习笔记 源码分析

    Bootstrap是Twitter推出的一个开源的用于前端开发的工具包,怎么用直接官网 http://twitter.github.io/bootstrap/ 我博客的定位就是把这些年看过的源码给慢慢 ...

  6. The Engine Document of JustWeEngine

    JustWeEngine - Android FrameWork An easy open source Android Native Game FrameWork. Github Game core ...

  7. ArcGIS Engine环境下创建自定义的ArcToolbox Geoprocessing工具

    在上一篇日志中介绍了自己通过几何的方法合并断开的线要素的ArcGIS插件式的应用程序.但是后来考虑到插件式的程序的配置和使用比较繁琐,也没有比较好的错误处理机制,于是我就把之前的程序封装成一个类似于A ...

  8. View Focus的处理过程及ViewGroup的mFocused字段分析

    通过上篇的介绍,我们知道在对KeyEvent的处理中有非常重要的一环,那就是KeyEvent在focus view的path上自上而下的分发, 换句话说只有focus的view才有资格参与KeyEve ...

  9. ExtJS笔记 Using Events

    Using Events The Components and Classes of Ext JS fire a broad range of events at various points in ...

随机推荐

  1. JAVA复习笔记之多线程并发

    前言:多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,还是值得深入研究一下 概念: 1 线程:进程中负责程序执行的执行单元线程本身依靠程序进行运行线程是程序中的顺序控制流,只能使用 ...

  2. ZooKeeper常见问题

    转载自原文:zookeeper(二)常见问题汇总 一.为什么zookeeper要部署基数台服务器? 所谓的zookeeper容错是指,当宕掉几个zookeeper服务器之后,剩下的个数必须大于宕掉的个 ...

  3. Oracle学习笔记:parallel并行处理

    在使用oracel查询时,可以通过并行提高查询速度.例如: ) from table_name a; 强行启用并行度来执行当前SQL.加上这个说明之后,可以强行启用Oracle的多线程处理功能,提高效 ...

  4. Oracle约束

    1.非空约束 DROP TABLE member PURGE; CREATE TABLE member( mid NUMBER, name ) NOT NULL ); 2.唯一约束 DROP TABL ...

  5. HBase应用之微博案例

    一. 需求分析 1) 微博内容的浏览,数据库表设计 2) 用户社交体现:关注用户,取关用户 3) 拉取关注的人的微博内容 二. 代码实现 代码设计总览: 1.创建命名空间以及表名的定义 //获取配置 ...

  6. js与jquery的动态加载脚本文件

    jquery动态加载 jQuery.getScript(url,[callback]) js动态加载 function loadJs(name) { document.write('<scrip ...

  7. loadrunner日志信息

    日志分两种1.在VUGEN中运行后的日志2.在controller中运行后的日志 日志设置分两步:1.首先,在VUGEN或controller中run-time setting, 选中always s ...

  8. loadrunner学习笔记之参数设置

    一.关于参数的定义 在你录制程序运行的过程中,脚本生成器自动生成由函数组成的用户脚本.函数中参数的值就是在录制过程中输入的实际值. 例如,你录制了一个Web应用程序的脚本.脚本生成器生成了一个声明,该 ...

  9. java技术选型

    综述 JDK版本:JDK8/JDK7 + OracleJDK/OpenJDK Java开发框架:Spring Boot/Spring + Hibernate/MyBatis 前后端分离:单页应用/模板 ...

  10. 【定时任务】Spring Boot 中如何使用 Quartz

    这篇文章将介绍如何在Spring Boot 中使用Quartz. 一.首先在 pom.xml 中添加 Quartz 依赖. <!-- quartz依赖 --> <dependency ...