2016-09-28 38 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(擴展)並獲取活動生命週期回調。

相關問題