【发布时间】:2015-10-17 03:47:36
【问题描述】:
我正在编写一个模块来检测当前正在运行的 Android 活动,并完成有关该活动的视图树的信息。
我了解 Android 框架布局和绘制视图。我在哪里可以找到诸如当前在屏幕上可见的视图及其位置等信息?
我尝试如下使用反射。但它总是返回空的视图集。有没有人指点一下如何做到这一点?
try {
String windowManagerClassName;
if (android.os.Build.VERSION.SDK_INT >= 17) {
windowManagerClassName = "android.view.WindowManagerGlobal";
} else {
windowManagerClassName = "android.view.WindowManagerImpl";
}
windowManager = Class.forName(windowManagerClassName);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
} catch (SecurityException e) {
throw new RuntimeException(e);
}
Field views;
Field instanceField;
try {
views = windowManager.getDeclaredField("mViews");
instanceField = windowManager.getDeclaredField(getWindowManagerString());
views.setAccessible(true);
instanceField.setAccessible(true);
Object instance = instanceField.get(null);
synchronized (windowManager) {
if (android.os.Build.VERSION.SDK_INT <= 18) {
return new HashSet<View>(Arrays.asList(((View[]) views.get(instance))));
}
}
...
【问题讨论】:
-
那些是外部工具。我正在寻找编程方式(代码)来获取我的应用程序中的信息。你有代码sn-p的指针吗?