How can I reliably simulate touch events on Android (without rooting) from Java outside my app which runs as a background service?
While this question has been asked before, most answers utilise ADB. (such as How to simulate touch events on Android device?)
https://github.com/chetbox/android-mouse-cursor offers a good solution using Accessibility, but is not very reliable as not all views respond to it, and games do not respond at all most of the time.
private void click() {
AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
if (nodeInfo == null) return;
AccessibilityNodeInfo nearestNodeToMouse = findSmallestNodeAtPoint(nodeInfo, cursorLayout.x, cursorLayout.y + 50);
if (nearestNodeToMouse != null) {
logNodeHierachy(nearestNodeToMouse, 0);
nearestNodeToMouse.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
nodeInfo.recycle();
}
This is the current code used by https://github.com/chetbox/android-mouse-cursor.
Android Version is 8.0, stock Android
Is there a better, more reliable way to simulate these touch events from Java? Thanks in advance!