Copia y Pega de Android en cualquier campo de texto de cualquier aplicación

Estoy desarrollando una aplicación para uso comercial con un servicio de fondo que está recibiendo números de transpondedor (de animales) de un lector RFID vía bluetooth.

Después de procesar el número recibido me gustaría enviarlo al portapapeles y pegarlo en el campo de texto enfocado de cualquier aplicación que esté actualmente en frente que en mi caso es una aplicación de navegador.

Ya he encontrado una pregunta similar a partir de 2013, pero sin respuesta aceptada por ahora. Todas las respuestas a la pregunta sólo explicó cómo utilizar ClipboardManager para copiar y pegar código dentro de la aplicación desarrollada, pero que no ha sido significado por el problema como aclaró en un comentario .

El escenario más simple que podría imaginar es simplemente simular una acción de pegar en el dispositivo de Android. Preferiría no tener que instalar una aplicación de terceros.

Sólo para añadir a la respuesta de Kirill y asumiendo que la aplicación tiene permiso de accesibilidad,

Cree una clase que extienda AccessibilityService y anule el método onAccessibilityEvent.

 public class SampleAccessibilityService extends AccessibilityService { @Override public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent) { AccessibilityNodeInfo source = accessibilityEvent.getSource(); if (source != null) { AccessibilityNodeInfo rowNode = getRootInActiveWindow(); if (rowNode != null) { for (int i = 0; i < rowNode.getChildCount(); i++) { AccessibilityNodeInfo accessibilityNodeInfo = rowNode.getChild(i); if (accessibilityNodeInfo.isEditable() && accessibilityNodeInfo.isFocused()) { accessibilityNodeInfo.performAction(AccessibilityNodeInfoCompat.ACTION_PASTE); return; } } } } } @Override public void onInterrupt() { } } 

accessibilityNodeInfo.performAction(AccessibilityNodeInfoCompat.ACTION_PASTE) pega el texto que se copia en el portapapeles.

También asegúrese de tener la configuración de accesibilidad correcta.

Config.xml

 <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:accessibilityFlags="flagDefault" android:accessibilityEventTypes="typeViewClicked|typeViewFocused" android:accessibilityFeedbackType="feedbackGeneric" android:notificationTimeout="0" android:canRetrieveWindowContent="true" android:description="@string/testing" /> 

Aquí android:accessibilityEventTypes="typeViewClicked|typeViewFocused" filtrará los eventos para ver el clic o ver el enfoque.

También puede realizar los eventos basados ​​en los paquetes utilizando "android:packageNames" (para que su servicio no se llame a menudo)

Finalmente declarar el servicio en manifiesto,

 <service android:name=".SampleAccessibilityService" android:label="@string/app_name" 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/config" /> </service> 

Si quieres que tu aplicación interactúe con una aplicación que no es tuya (el navegador), tendrás que conceder a esta aplicación los accessibility permissions . Son un tipo especial de permiso que permite a las aplicaciones interactuar con algo que es un poco más sensitivo.

Hay acciones de accesibilidad, la que estás buscando es AccessibilityNodeInfoCompat.ACTION_PASTE te permite preformar una pasta en un campo enfocado.

Tenga en cuenta que le recomiendo que reemplace el navegador con un inapp WebView , e inyectar los valores con javascript esta será una solución mucho más robusta para su automatización. Usted puede encontrar más información sobre cómo ejecutar JS en una webview aquí: ¿Cómo obtener valor de retorno de javascript en webview de android?

  • R.id no se puede resolver
  • MojoExecutionException: Maven con Android
  • Actualizar Android SDK causa bloqueo java.lang.VerifyError
  • Android Studio - Problema en build.gradle uncaught error de traducción ExecutionException OutOfMemory
  • Android - Transiciones de elementos compartidos con actividad de llamada finish ()
  • ¿Cuál es la clase alternativa para AudioInputStream en java (Android)?
  • Conector de Bluetooth
  • Convierta la aplicación de iPhone a la aplicación de Android: ¿necesito conocer Objective C?
  • Android: actividad establecer conexión de red
  • Mala magia de archivos de clase al usar dx.bat
  • ImageViews en LinearLayout redondeado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.