1

我想从设置为前台服务的服务中注入触摸事件(它在通知栏中保留通知)。我的设备已植根,我的应用程序设置为系统应用程序。我已将设备设置为显示开发人员选项中的触摸手势以跟踪该过程。有两个问题:

  1. 有时当我调用注入代码时,设备没有出现触摸手势,这意味着触摸事件没有被注入。

  2. 如果触摸发生并且我在屏幕上看到手势,有时它会执行模拟触摸应该发生的动作,有时则不会。我注意到如果触摸是模拟的,prs(触摸施加的压力)的值为0,而普通手指触摸的prs大于0。似乎prs需要> 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(); 

我怎么解决这个问题?任何帮助表示赞赏。

4

0 回答 0