android.view.accessibility.AccessibilityNodeInfo#findFocus ( )源码实例Demo

下面列出了android.view.accessibility.AccessibilityNodeInfo#findFocus ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: DevUtils   文件: AccessibilityUtils.java
/**
 * 查找符合条件的节点
 * @param service   {@link AccessibilityService}
 * @param focus     焦点类型
 * @param className 节点所属的类 ( 类名 )
 * @return 拥有特定焦点类型的节点
 */
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
public static AccessibilityNodeInfo findFocus(final AccessibilityService service, final int focus, final String className) {
    if (service == null || className == null) return null;
    // 获取根节点
    AccessibilityNodeInfo nodeInfo = service.getRootInActiveWindow();
    // 取得当前激活窗体的根节点
    if (nodeInfo == null) return null;
    // 通过指定的焦点类型找到当前的节点
    AccessibilityNodeInfo node = nodeInfo.findFocus(focus);
    // 防止为 null
    if (node != null) {
        // 判断是否符合的类型
        if (node.getClassName().equals(className) && node.isEnabled()) {
            return node;
        }
    }
    return null;
}
 
源代码2 项目: DevUtils   文件: AccessibilityUtils.java
/**
 * 查找符合条件的节点
 * @param service {@link AccessibilityService}
 * @param focus   焦点类型
 * @return 拥有特定焦点类型的节点
 */
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
public static AccessibilityNodeInfo findFocus(final AccessibilityService service, final int focus) {
    if (service == null) return null;
    // 获取根节点
    AccessibilityNodeInfo nodeInfo = service.getRootInActiveWindow();
    // 取得当前激活窗体的根节点
    if (nodeInfo == null) return null;
    // 通过指定的焦点类型找到当前的节点
    return nodeInfo.findFocus(focus);
}
 
源代码3 项目: SmsCode   文件: SmsCodeAutoInputService.java
/**
 * 获取当前输入焦点控件
 * @return 当前输入焦点,获取失败返回null
 */
private AccessibilityNodeInfo findFocusNodeInfo() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        return findFocus(AccessibilityNodeInfo.FOCUS_INPUT);
    } else {
        AccessibilityNodeInfo rootNodeInfo = getRootInActiveWindow();
        if (rootNodeInfo == null) {
            XLog.d("rootNodeInfo is null");
            return null;
        }
        return rootNodeInfo.findFocus(AccessibilityNodeInfo.FOCUS_INPUT);
    }
}
 
源代码4 项目: brailleback   文件: FocusFinder.java
public static AccessibilityNodeInfoCompat getFocusedNode(
    AccessibilityService service, boolean fallbackOnRoot) {
    AccessibilityNodeInfo root =
            service.getRootInActiveWindow();
    AccessibilityNodeInfo focused = null;
    try {
        AccessibilityNodeInfo ret = null;
        if (root != null) {
            focused = root.findFocus(
                AccessibilityNodeInfo.FOCUS_ACCESSIBILITY);
            if (focused != null && focused.isVisibleToUser()) {
                ret = focused;
                focused = null;
            } else if (fallbackOnRoot) {
                ret = root;
                root = null;
            }
        } else {
            LogUtils.log(service, Log.ERROR, "No current window root");
        }
        if (ret != null) {
            return new AccessibilityNodeInfoCompat(ret);
        }
    } finally {
        if (root != null) {
            root.recycle();
        }
        if (focused != null) {
            focused.recycle();
        }
    }
    return null;
}
 
源代码5 项目: talkback   文件: FocusFinder.java
public static @Nullable AccessibilityNodeInfoCompat getFocusedNode(
    AccessibilityService service, boolean fallbackOnRoot) {
  AccessibilityNodeInfo root = service.getRootInActiveWindow();
  AccessibilityNodeInfo focused = null;

  try {
    AccessibilityNodeInfo ret = null;
    if (root != null) {
      focused = root.findFocus(AccessibilityNodeInfo.FOCUS_ACCESSIBILITY);
      if (focused != null && focused.isVisibleToUser()) {
        ret = focused;
        focused = null;
      } else if (fallbackOnRoot) {
        ret = root;
        root = null;
      }
    } else {
      LogUtils.e(TAG, "No current window root");
    }

    if (ret != null) {
      return AccessibilityNodeInfoUtils.toCompat(ret);
    }
  } finally {
    if (root != null) {
      root.recycle();
    }

    if (focused != null) {
      focused.recycle();
    }
  }

  return null;
}