在android-P版本上方法被删除如何调用到系统的native 方法?

新手上路,请多包涵

原来功能是开启一个服务,服务中开启一个透明的activity记录用户的操作步骤

IBinder wmbinder = ServiceManager.getService(Context.WINDOW_SERVICE);
mWindowManager = IWindowManager.Stub.asInterface(wmbinder);

获取到 IWindowManager.aidl 后调用里面的monitorInputExternal(String InputChannelName) 方法(如下)生成一个InputChannel name(client)
这里记为 方法1

mInputChannel = mWindowManager.monitorInputExternal(name);

但是到P版本后 方法1 在aidl里被删除
这个IWindowManager.aidl里面只提供了monitorSideTouchInputExternal(String InputChannelName) 方法

这里记为 方法2

mInputChannel = mWindowManager.monitorSideTouchInputExternal(name);

这样在继承了InputEventReceiver 自定义类里的onInputEvent() 方法只能响应回调侧边栏(P版本的手机有侧边栏的功能)的触摸事件 主屏幕界面的触摸事件不会去回调这个方法

但是方法1最终调用的方法monitorInput(String inputChannelName)在源码 InputManagerService.java 中可以找到(framework.jar中没有这个类, 通过其他办法得到的server.jar), 获取到这个调用这个方法的话方法中调用了native方法 nativeRegisterInputChannel(mPtr, inputChannels[0], null, true);

会报如下错误
java.lang.UnsatisfiedLinkError: No implementation found for long com.android.server.input.InputManagerService.nativeInit...

怎么处理这种情况 或者怎么在代码里调用系统的native方法

阅读 1.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题