如何从android.app.Aplication获取应用程序窗口

如何从android.app.Aplication获取应用程序窗口,android,Android,我正在开发android库,它应该能够记录所有触摸事件 我可以通过以下方式覆盖窗口回调: //set Window.Callback for getting touch event final Window window = context.getWindow(); final Window.Callback localCallback = window.getCallback(); window.setCallback(new MyWindowCallback(loc

我正在开发android库,它应该能够记录所有触摸事件

我可以通过以下方式覆盖窗口回调:

//set Window.Callback for getting touch event 
    final Window window = context.getWindow();
    final Window.Callback localCallback = window.getCallback();
    window.setCallback(new MyWindowCallback(localCallback));
我正在开发库,所以我需要一些方法来获取应用程序的上下文,以便能够逐个上下文获取窗口。getWindow()。我发现一个解决方案建议:

private static Application getApplicationContext() throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException {
Context context;
final Class<?> activityThreadClass =
        Class.forName("android.app.ActivityThread");
final Method method = activityThreadClass.getMethod("currentApplication");
context = (Application) method.invoke(null, (Object[]) null);
Log.d(tag_, "Context is " + context);
application = (Application)context;
return application;}
私有静态应用程序getApplicationContext()抛出ClassNotFoundException、NoSuchMethodException、IllegaAccessException、InvocationTargetException{
语境;
最终类活动ThreadClass=
Class.forName(“android.app.ActivityThread”);
最终方法=activityThreadClass.getMethod(“currentApplication”);
context=(应用程序)方法.invoke(null,(Object[])null);
Log.d(tag_,“Context是”+Context);
应用程序=(应用程序)上下文;
返回应用程序;}
但这会返回android.app.Application,我需要从这个返回的实例中获取活动,因为我只能在活动实例上调用getWindow()

所以问题是,如何从返回的应用程序实例中获取活动实例


感谢您获得应用程序上下文,您可以注册application.ActivityLifecycleCallbacks以获取活动生命周期事件

application.registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback)

创建自定义ActivityLifecycleCallbacks(扩展)并使用activity实例获取activity lifecycle回调。

这是不可能的。毕竟,在任何时间点都可能有零个、一个或多个窗口与应用程序关联。即使您将此限制为活动的窗口,在Android 7.0+上,使用multi-window,一次可能会有2+个活动可见。好的,但假设我只将此限制为活动的窗口,并且假设只有一个活动是visibe,我也可以。这可能有助于获得活动窗口,但如果您还想检索对话框窗口或弹出窗口,该怎么办?