¿Cómo acceder al contenido html de AccessibilityNodeInfo de un elemento WebView mediante Accessibility Service en Android?

Estoy tratando de acceder al contenido textual de otra aplicación que probablemente se construye utilizando un marco no nativo (js + html).

Por lo tanto, pensé que voy a tratar de acceder a los datos de un nodo de accesibilidad correspondiente a un elemento WebView. Sin embargo, soy incapaz de agarrar los datos text / html usando los métodos usuales puesto que los métodos como getText () trabajan solamente si es un elemento androide nativo tal como un TextView, el botón etc.

public class MyAccessibilityService extends AccessibilityService { @Override public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent) { AccessibilityNodeInfo accessibilityNodeInfo = accessibilityEvent.getSource(); if (accessibilityNodeInfo == null) { return; } int childCount = accessibilityNodeInfo.getChildCount(); for (int i = 0; i < childCount; i++) { AccessibilityNodeInfo accessibilityNodeInfoChild = accessibilityNodeInfo.getChild(i); myRecursiveFunc(accessibilityNodeInfoChild); } } @Override public void onInterrupt() { } private void myRecursiveFunc(AccessibilityNodeInfo accessibilityNodeInfoChild) { if (accessibilityNodeInfoChild.getChildCount() > 0) { for (int j = 0; j < accessibilityNodeInfoChild.getChildCount(); j++) { AccessibilityNodeInfo child = accessibilityNodeInfoChild.getChild(j); if (child != null) { myRecursiveFunc(child); } } } else { if ("android.webkit.WebView".equals(accessibilityNodeInfoChild.getClassName())) { //===========This is a WebView's AccessibilityNodeInfo !!!! //===========How to get HTML data from nodeinfo object here ?? } } } 

}

One Solution collect form web for “¿Cómo acceder al contenido html de AccessibilityNodeInfo de un elemento WebView mediante Accessibility Service en Android?”

¿Su servicio tiene FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY ?

 final AccessibilityServiceInfo info = getServiceInfo(); info.flags |= AccessibilityServiceInfo.FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY; setServiceInfo(info); 

El AccessibilityService (TalkBack) predeterminado de Android requiere que se pueda leer el texto en WebView . Desde el examen de la fuente, parece que hay algunos script de inyección y un poco de hackiness a fin de ser capaz de obtener el contenido textual de los elementos HTML

Usted debe comprobar hacia fuera su fuente:

TalkBackService

WebInterfaceUtils

ProcessorWebContent

  • Ajuste del tamaño dinámico del diseño en Android
  • Android - cómo evitar que webview cargue cuando no hay conexión a internet
  • Cómo activar y desactivar con seguridad el zoom de WebView según sea necesario
  • ¿Cómo deshabilitar el mensaje de pan tostado que a veces aparece con los controles de zoom en un WebView?
  • Maneje las teclas de flecha desde D-pad en la aplicación WebView de Google TV
  • Android WebView: amplía el zoom a una escala específica después de cargar el contenido
  • Cómo reproducir URL de vídeo dentro de la vista web de Android
  • Eliminar la superposición de enfoque: color de la vista web
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.