我想从设置为前台服务的服务中注入触摸事件(它在通知栏中保留通知)。我的设备已植根,我的应用程序设置为系统应用程序。我已将设备设置为显示来自开发人员选项的触摸手势以跟踪该过程。有两个问题:
有时当我调用注入代码时,设备不会出现触摸手势,这意味着没有注入触摸事件。
如果触摸发生并且我在屏幕上看到手势,有时它会执行应该通过模拟触摸发生的动作,有时它不会。我注意到,如果触摸被模拟为1,则prs的值(通过触摸施加的压力)为0,而通过正常手指触摸的prs大于0.看起来prs需要> 0。 0表示模拟触摸,以便进行动作。
我无法弄清楚为什么会发生这种情况,这是服务中的注入代码:
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
Process process = Runtime.getRuntime().exec("su");//supolicy --live \"allow appdomain input_device dir { ioctl read getattr search open }\" \"allow appdomain input_device chr_file { ioctl read write getattr lock append open }\"");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
String cmd = "/system/bin/input tap " + xPos + " " + yPos +"\n";
Runtime.getRuntime().exec(cmd);
// Toast toast = Toast.makeText(getApplicationContext(), "***INJECTION DONE ***", Toast.LENGTH_LONG);
// toast.show();
} catch (IOException e) {
// Toast toast = Toast.makeText(getApplicationContext(), "INJECTION ERROR !", Toast.LENGTH_LONG);
// toast.show();
e.printStackTrace();
// Log.e(" ", e.getStackTrace().toString());
}
}
});
t.start();
我该如何解决这个问题?任何帮助表示赞赏。