studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android onclick

programacion - Android Clickable en el texto de la pantalla



manual de programacion android pdf (3)

En lugar de tratar de leer texto, use un receptor de transmisión y en cada transmisión verifique la longitud de las vistas de texto cuando esté configurado, inicie una aplicación o haga lo que desee.

Tenía curiosidad, vi esta aplicación el otro día que le permitió abrir otras aplicaciones y configurar ciertas funciones automáticamente. Me he dado cuenta de que debe estar utilizando una función de clic en pantalla de algún tipo, pero parece que no puedo encontrar ninguna documentación para algo como esto. Por ejemplo, si sabemos que el texto en pantalla de la otra aplicación es "Listo", ¿hay alguna manera de leer ese texto y hacer algo como esto?

protected void processText(String text) { if (text.contains("Ready")) // click the ready text }


Lo he hecho usando AccessibilityService . Sin embargo, solo funcionará bien en el nivel API> = 16.

Necesita extender AccessibilityService . Por ejemplo, esta clase recibirá el texto de las respuestas de USSD y descartará el diálogo.

// .... public class UssdAccessibilityService extends AccessibilityService { public UssdAccessibilityService() { } @TargetApi(16) @Override public void onAccessibilityEvent(AccessibilityEvent event) { if (!"com.android.phone".equalsIgnoreCase((String)event.getPackageName())){ // In this example we are only interested in events comming // from "com.android.phone" package event.recycle(); return; } String className = (String)event.getClassName(); if (className == null || (!className.contains("AlertDialog") && !className.contains("AlertDialog"))){ // Class is not an USSD dialog event.recycle(); return; } AccessibilityNodeInfo source = event.getSource(); if (source == null) { // getSource() is annotated @Nullable, so we do this to be // safe just in case event.recycle(); return; } AccessibilityNodeInfo acceptButton = null; String ussdText = null; int childCount = source.getChildCount(); for (int i = 0; i < childCount; i++){ AccessibilityNodeInfo current = source.getChild(i); if (current == null) continue; String currentText = (String)current.getText(); if (current.isClickable()){ // In the case of USSD dialogs, there is only one clickable. // May be necessary to do more robust search in other scenarios acceptButton = current; continue; } ussdText = currentText; current.recycle(); } if (ussdText!= null) { if (acceptButton != null) acceptButton.performAction(AccessibilityNodeInfo.ACTION_CLICK); } source.recycle(); event.recycle(); } // .... }

Debe declarar el servicio de accesibilidad en el manifiesto en <application>

<service android:name=".UssdAccessibilityService" android:enabled="true" android:label="Read USSD codes and dismiss" android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"> <intent-filter> <action android:name="android.accessibilityservice.AccessibilityService" /> </intent-filter> <meta-data android:name="android.accessibilityservice" android:resource="@xml/accessibility_service_config" /> </service>

En res/xml crea accessibility_service_config.xml

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:description="@string/accessibility_service_description" android:packageNames="com.android.phone,com.ats.android.activationcodebot" android:accessibilityEventTypes="typeWindowStateChanged|typeWindowContentChanged" android:accessibilityFlags="flagDefault" android:accessibilityFeedbackType="feedbackSpoken" android:notificationTimeout="100" android:canRetrieveWindowContent="true" />

Por supuesto, debe adaptar este código a sus propias necesidades.

Finalmente, deberá habilitar el servicio de accesibilidad manualmente en Configuración> Accesibilidad en Android (o solicite al usuario que lo haga).

Leer más ... Desarrollar un servicio de accesibilidad


Para poder hacer eso desde otra aplicación, necesita capturar la pantalla y determinar la posición del texto mediante el servicio de reconocimiento de texto.

cuando otra aplicación está activa, su aplicación debe estar activa para poder capturar la pantalla. Entonces solo puedes usar el servicio de Android que siempre funciona en segundo plano.

Sin embargo, para capturar ScreenShot para su actividad, debe tener una Vista de su activity y cuál no está presente en su service por lo que debe hacer una TimerTask que llame a su actividad cada hora y su activity responda a su activity actual. ver y puede capturar el ScreenShot de eso.

O si desea tomar una captura de pantalla de pantalla de su dispositivo actual (cualquier aplicación), entonces tiene que rootear el permiso , y leer framebuffer para lo que dará los datos brutos de la pantalla actual y luego convertirlo a mapa de bits o cualquier archivo de imagen que pueda hacerlo a tu servicio

En pocas palabras, es posible para teléfonos rooteados. De lo contrario, no puede tomar capturas de pantalla de otras aplicaciones si no está rooteado. Permitido solo para tomar una captura de pantalla de tu aplicación.

Para poder analizar la pantalla si hay algún texto "Listo" o no. Su aplicación debe ser vivida / activada para poder capturar la pantalla.