2016-09-28 18 views
0

我正在开发android库,它应该能够记录所有触摸事件。如何从android.app.Aplication获取应用程序窗口

我能够通过重写窗口回调做到这一点:

//set Window.Callback for getting touch event 
    final Window window = context.getWindow(); 
    final Window.Callback localCallback = window.getCallback(); 
    window.setCallback(new MyWindowCallback(localCallback)); 

我开发库,所以我需要一些方法来获取应用程序的情况下能够通过context.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;} 

但这返回android.app.Application并不知我需要得到活动从这个返回的实例,因为我只能在活动实例调用getWindow()。

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

感谢

+0

这不是直接可能的。毕竟,在任何时间点都可能有与应用程序相关的零个,一个或多个窗口。即使您将其限制在Android 7.0以上的活动窗口中,也可以使用多窗口一次显示2+活动。 – CommonsWare

+0

好的,但让我说,我只限于一个活动的窗口,并假设只有一个活动visibe。 –

回答

0

当你可以注册Application.ActivityLifecycleCallbacks获得活动生命周期事件应用程序上下文。

application.registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback) 

使用Activity实例创建自定义ActivityLifecycleCallbacks(扩展)并获取活动生命周期回调。

相关问题