您好,登錄后才能下訂單哦!
Android的 - 以編程方式找到所有應(yīng)用程序中所有的的窗口?
是否有可能以編程方式枚舉所有當(dāng)前app的窗口
對話框,例如都將在新窗口中打開,獨(dú)立于主activity窗口。我可以通過Dialog.getWindow(找到它們),但我不知道我怎么會用一個內(nèi)置的組件做到這一點(diǎn),如在活動菜單彈出。
有沒有什么辦法,從應(yīng)用程序中,上下文,或者窗口管理器,還是其他什么東西,枚舉與我的應(yīng)用程序關(guān)聯(lián)的所有窗口?
我可以在adb dumpsys窗口看到我所有的應(yīng)用程序的窗口,但我正在尋找一種方法來在我的應(yīng)用程序做到這一點(diǎn),無需root。
Android的Android的視圖
最佳答案:
我找到一個方法通過反射 WindowManagerGlobal.,至少到目前為止他在android-18版本中工作的很好.....
[java] view plaincopy
private void logRootViews() {
try {
Class wmgClass = Class.forName("android.view.WindowManagerGlobal");
Object wmgInstnace = wmgClass.getMethod("getInstance").invoke(null, (Object[])null);
Method getViewRootNames = wmgClass.getMethod("getViewRootNames");
Method getRootView = wmgClass.getMethod("getRootView", String.class);
String[] rootViewNames = (String[])getViewRootNames.invoke(wmgInstnace, (Object[])null);
for(String viewName : rootViewNames) {
View rootView = (View)getRootView.invoke(wmgInstnace, viewName);
Log.i(TAG, "Found root view: " + viewName + ": " + rootView);
}
} catch (Exception e) {
e.printStackTrace();
}
}
輸出:
Found root view:com.example.paintsample/com.example.paintsample.PaintSample/android.view.ViewRootImpl@41deeff0: com.android.internal.policy.impl.PhoneWindow$DecorView{41dcc278 V.E..... R....... 0,0-768,1184}
Found root view: PopupWindow:42887380/android.view.ViewRootImpl@42891820: android.widget.PopupWindow$PopupViewContainer{42891450 V.E..... ........ 0,0-424,618}
本文地址:http://www.itmmd.com/201412/297.html
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。