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

时间:2016-09-28 11:03:49

标签: android

我正在开发能够记录所有触摸事件的android库。

我可以通过以下方式覆盖Window回调来实现:

//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,不知何故我需要从这个返回的实例中获取Activity,因为我只能在Activity实例上调用getWindow()。

所以问题是,如何从返回的Application实例中获取Activity实例?

由于

1 个答案:

答案 0 :(得分:0)

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

application.registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback)

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