从服务中注入触摸事件 - Android

时间:2016-03-29 18:53:06

标签: android touch android-service-binding android-touch-event

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

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

  2. 如果触摸发生并且我在屏幕上看到手势,有时它会执行应该通过模拟触摸发生的动作,有时它不会。我注意到,如果触摸被模拟为1,则prs的值(通过触摸施加的压力)为0,而通过正常手指触摸的prs大于0.看起来prs需要> 0。 0表示模拟触摸,以便进行动作。

  3. 我无法弄清楚为什么会发生这种情况,这是服务中的注入代码:

        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(); 
    

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

0 个答案:

没有答案