账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    getRootInActiveWindow()在窗口改变后后返回null
    18
    0

    方法在第一次调用时可以获取到窗口内容,然后在窗口改变后返回null
    这个log在第一次进入的时候打印的nodeInfo正常,在窗口改变后打印就是null了

    public void onAccessibilityEvent(AccessibilityEvent event) {
     int eventType = event.getEventType();
            switch (eventType) {
                case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:
                 test();
            }
    }
    private void test() {
     AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
            Log.d(TAG, "getRootInActiveWindow: "+nodeInfo);
            if (nodeInfo != null) {
                List<AccessibilityNodeInfo> list = nodeInfo.
                            findAccessibilityNodeInfosByText("更多");
                    for (AccessibilityNodeInfo n : list) {
                        if (n.getClassName().equals("android.widget.TextView") && n.isEnabled()) {
                            AccessibilityNodeInfo parent = n.getParent();
                            parent.performAction(AccessibilityNodeInfo.ACTION_CLICK);
                        }
                    }
            }
    }
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 执著之☆海 普通会员 1楼

      getRootInActiveWindow() 方法返回的是窗口的根控件(通常是窗口的主窗口),如果窗口被其他窗口覆盖,该方法将返回null。

      如果你在窗口改变后调用getRootInActiveWindow(),但是返回的仍然是null,那么可能是因为其他窗口已经覆盖了这个窗口。你可以使用GetWindow过程中检查语句来确定哪个窗口覆盖了这个窗口。

      以下是一个简单的示例:

      csharp if (GetWindow过程中检查("YourWindowName")) { // 窗口被其他窗口覆盖,返回null } else { // 窗口被其他窗口覆盖,不返回null }

      请注意,这只是一个基本示例,实际使用时可能需要考虑更多的因素,例如窗口可能已经关闭或者被其他窗口遮挡。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部