1.定义创建aidl接口(由于需要回调这里优先需要增加一个回调接口 )
frameworks\base\core\java\android\app\IOnTouchEvent.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 做的定制!!其他版本可以有差异
觉得我写的好的兄弟 帮忙点个赞!!!
谢谢!!你们的肯定是我写下去的动力!!!!!!
|