1.定义创建aidl接口(由于需要回调这里优先需要增加一个回调接口 )
frameworks\base\core\java\android\app\IOnTouchListener.aidl
package android.app;
oneway interface IOnTouchListener {
void onTouchEvent( int action);
}
2.新增调用接口 在 base/core/java/android/view/IWindowManager.aidl
修改如下:
import android.app.IOnTouchListener;
...
void registerIOnTouchListener(IOnTouchListener touchListener);
void unregisterIOnTouchListener();
3.剩下就是在frameworks\base\services\core\java\com\android\server\wm\WindowManagerService.java
中修改 也是最重要的一步
新增两个实现方法 :
@Override
public void registerIOnTouchListener(IOnTouchListener touchListener ){
this.touchListener = touchListener ;
pointerEventListener = new PointerEventListener() {
@Override
public void onPointerEvent(MotionEvent motionEvent) {
if (ydTouchListener != null){
try{
touchListener .onTouchEvent(motionEvent.getAction());
}catch(RemoteException e){
Slog.e(TAG, "RemoteException: onTouchEvent " );
}
}
}
};
registerPointerEventListener(pointerEventListener, Display.DEFAULT_DISPLAY);
}@Override
public void unregisterIOnTouchListener(){
if (touchListener != null) touchListener = null;
if (pointerEventListener != null){
unregisterPointerEventListener(pointerEventListener, Display.DEFAULT_DISPLAY);
pointerEventListener=null;
}
}
4.上层APP调用:
//全局监听触摸事件 try { WindowManagerGlobal.getWindowManagerService().registerIOnTouchListener(new IOnTouchListener.Stub() { @Override public void onTouchEvent(int action ) { Log.d("lmj","action :"+action); } }); } catch (Exception e) { e.printStackTrace(); }
全局监听接口定制就实现完成!!
由于此版本是针对Android11 做的定制!!其他版本可以有差异
觉得我写的好的兄弟 帮忙点个赞!!!
谢谢!!你们的肯定是我写下去的动力!!!!!!