我正在开发记录应用程序的所有触摸输入的android库。 我已经设法拦截活动(和片段)的所有触摸输入,但不是弹出窗口。
如何检测活动中弹出的新窗口的触摸输入?
以下代码显示了我如何截取活动窗口的所有触摸输入。
在Application.onCreate()
内部,我呼叫Application.registerActivityLifecycleCallbacks()
,并在回调后注册:
override fun onActivityCreated(activity: Activity, savedState: Bundle?) {
val localCallback = activity.window.callback
activity.window.callback = object : ActivityWindowCallbackWrapper(activity, localCallback) {
override fun dispatchTouchEvent(motionEvent: MotionEvent): Boolean {
//over here I can log all touch input
return super.dispatchTouchEvent(motionEvent)
}
override fun onWindowFocusChanged(hasFocus: Boolean) {
//here I can detect that some popup has popped up
//if hasFocus == false it means that some other window has focus -> probably popup
super.onWindowFocusChanged(hasFocus)
}
}
}
此代码拦截活动窗口的所有触摸事件,它识别何时聚焦另一个窗口(另一个窗口弹出),但我不知道如何为新聚焦的窗口注册回调。
here是如何检测应用程序的所有根视图的一个很好的示例,但我无法在它们上注册任何回调。