¿Cómo escuchar los grifos y obtener vistas con Accessibility en Android?
Quiero implementar un servicio de accesibilidad en mi aplicación de Android, que puede hacer lo siguiente:
=> Obtenga los clics / clics en pantalla en todas las aplicaciones.
- ¿Cómo comprobar si Receiver está registrado en Android?
- Excepción de puntero nulo de Android en la respuesta de Retrofit
- SoundCloud HTML5 Widget API - No funciona en Chrome para Android
- API de WooCommerce para aplicaciones móviles
- Cómo terminar YoutubeStandAlonePlayer después de completar el video en Android?
=> Obtener la vista que fue pulsada / pulsada.
Inicialmente pensé que no sería posible hacerlo por razones de seguridad, pero al hacer algunas investigaciones me encontré con una aplicación ( Portapapeles Nativo ) que podría hacer las siguientes cosas:
=> Detectar taps en EditText
s desde cualquier aplicación
=> Añadir valor (cadena) a aquellos EditText
.
También vi el talkback de Google que habla lo que usted golpea ligeramente. Para que hable, necesita acceder a la vista (para obtener el texto) en todas las aplicaciones.
Estas aplicaciones obviamente hace uso de "servicios de accesibilidad" para hacerlo, pero me gustaría saber cómo puedo implementar eso?
En su mayoría, encontrar tutoriales o cosas para las cosas que tengo que lograr, pero estoy luchando encontrar algunos para la implementación de servicio de accesibilidad para mi aplicación. Hice visitar la documentación oficial de Android que es demasiado técnico para un novato como yo. (Inicialmente prefiero aprender de Youtube, SO y tutorial sitios web). También será genial si me puede señalar a algunos otros tutoriales que cubre estas cosas.
- Escribir una API de PHP y una aplicación para Android
- API de Android para detectar nuevos medios desde cámara incorporada y micrófono
- Android-Desarrollo: API para encontrar Rss-Feeds
- Android: ¿Cómo se comprueba si un determinado AccessibilityService está habilitado
- Google Maps v2 - establecer mi ubicación y ampliar
- Bloqueo de aplicación en Android M
- BluetoothLeScanner.startScan () requiere nuevos permisos en Marshmallow?
- Cómo hacer json api
Los servicios de accesibilidad están bastante mal documentados, pero he creado un código de servicio de accesibilidad, que establece un proyecto inicial y registra las devoluciones de llamada base. Voy a añadir el enlace más tarde, pero aquí hay un poco de código que creo que le importa sobre sus preguntas específicas. El andamio, proyecto montado y tal lo dejo para el repo.
A continuación se muestra la devolución de llamada onAccessibilityEvent. Aquí es donde escuchará los diferentes tipos de eventos y el lugar más conveniente para captar el contenido de la pantalla para la mayoría de los escenarios. Sin embargo, como un servicio de accesibilidad que también no tiene que esperar a los eventos. Podrías lanzar fácilmente una AsynTask y agarrarla en un intervalo de algún tipo.
public void onAccessibilityEvent(AccessibilityEvent event) { CLog.d(event.toString()); switch (event.getEventType()) { //On Gesture events print out the entire view heirarchy! case AccessibilityEvent.TYPE_GESTURE_DETECTION_START: CLog.d(A11yNodeInfo.wrap(getRootInActiveWindow()).toViewHeirarchy()); case AccessibilityEvent.TYPE_VIEW_CLICKED: CLog.d(event.getSource().toString()); default: { //The event has different types, for you, you want to look for "action clicked" if (event.getSource() != null) { CLog.d(A11yNodeInfo.wrap(event.getSource()).toViewHeirarchy()); } } } }
Voy a señalar un poco de configuración para esto, porque es muy importante. Los servicios de accesibilidad se configuran mejor a través de un archivo XML conectado a su servicio a través del archivo Manifest. El contenido de este archivo es:
<?xml version="1.0" encoding="utf-8"?> <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:description="@string/accessibility_service_description" android:accessibilityEventTypes="typeAllMask" android:accessibilityFlags="flagReportViewIds" android:canRetrieveWindowContent="true" android:canRequestTouchExplorationMode="true" android:accessibilityFeedbackType="feedbackSpoken" android:notificationTimeout="100" android:settingsActivity="com.moba11y.basicaccessibilityservice.SettingsActivity" />
Para usted, los bits importantes son canRetrieveWindowContent="true"
y "accessibilityEventTypes =" typeAllMask "". Un bit de diseño que me gusta, es asegurar que su agarrar en el conjunto mínimo de tipos de eventos que desea. Diferentes eventos de accesibilidad reportan resultados ampliamente diferentes. Por ejemplo, muchos eventos devuelven "null" de getSource (). Esto le obliga a agregar una gran cantidad de filtros para esto, o el riesgo de las excepciones puntero nulo. Es bastante molesto.
Lo último que necesitas es Acciones de Accesibilidad. Esto es lo que le permite simular clics, clics largos Y agregar texto a una vista de texto editable. A continuación se muestra el código que le permite hacer esto.
public void onAccessibilityEvent(AccessibilityEvent event) { AccessibilityNodeInfo source = event.getSource(); if (source != null & event.getClassName().equals("android.widget.EditText")) { Bundle arguments = new Bundle(); arguments.putCharSequence(AccessibilityNodeInfo .ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, "some value"); source.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments); } }
https://github.com/chriscm2006/Android-Accessibility-Service-Boilerplate
- Error de ejecución para la tarea ': app: compileDebugKotlin'
- ¿Cómo agregar nuevos campos al contacto?