InjectInputEvent 不起作用,无法获取实例

问题描述 投票:0回答:1

这就是 logcat 输出的内容,我已经用我自己的证书签署了我的 android apk

java.lang.NoSuchMethodException: com.example.receiver.InputManager.getInstance []
    at java.lang.Class.getMethod(Class.java:2937)
    at java.lang.Class.getDeclaredMethod(Class.java:2914)
    at com.example.receiver.InputHandler.getInputManager(InputHandler.java:59)
    at com.example.receiver.InputHandler.injectInputEvent(InputHandler.java:43)
    at com.example.receiver.InputHandler.Handle(InputHandler.java:84)
    at com.example.receiver.Main.main(Main.java:38)
    at com.example.receiver.MainActivity.lambda$onCreate$0(MainActivity.java:21)
    at com.example.receiver.MainActivity$$ExternalSyntheticLambda0.run(Unknown Source:2)

这是与injectInputEvent()相关的代码

    private void injectInputEvent(MotionEvent event) {
        try {
            getInjectInputEvent().invoke(getInputManager(), event, 0);
        } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
            e.printStackTrace();
        }
    }

    private static Method getInjectInputEvent() throws NoSuchMethodException {

        Class<InputManager> cl = InputManager.class;
        Method method = cl.getDeclaredMethod("injectInputEvent", InputEvent.class, int.class);
        method.setAccessible(true);
        return method;
    }

    private static InputManager getInputManager() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        Class<InputManager> cl = InputManager.class;
        Method method = cl.getDeclaredMethod("getInstance");
        method.setAccessible(true);
        return (InputManager) method.invoke(cl);
    }

我在清单中设置了以下权限:

<uses-permission android:name="android.permission.INJECT_EVENTS"/>

我从 adb shell 运行我的 apk,如下所示:

am start com.example.receiver/com.example.receiver.MainActivity

这应该有效,我认为它适用于 scrcpy 的服务器 为什么它不适合我的?

我没有 root 访问权限。

我期望应用程序能够 InjectInputEvents,但它不能。 我尝试从 adb shell 和 android studio 启动它,但没有任何区别。

java android linux function permissions
1个回答
0
投票

Scrcpy 使用

adb shell CLASSPATH=/data/local/tmp/scrcpy-server.jar app_process / com.genymobile.scrcpy.Server 2.1 scid=12345678 log_level=info audio=false max_size=1920
以 shell 权限启动服务器。

am start
正常启动应用程序(用户权限)。

您可以尝试shizuku直接使用系统API。

© www.soinside.com 2019 - 2024. All rights reserved.