![]() |
|
| Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
«
Tema Anterior
|
Siguiente tema
»
|
|
Herramientas |
|
#1
|
||||
|
||||
|
Como hago esta app?
Hola, queria hacer una app que al mantener una tecla presionada(pensado para usar el movil con un teclado externo o teamviewer por ejemplo), por ejemplo la W, que haga una determinada acción, como vibrar o reproducir un sonido. Habia pensado hacerlo con App inventor, por la sencillez y demás, pero no consigo hacer que detecte una pulsación mantenida del teclado. ¿Alguien puede eharme un cable, o darme algunas pautas?
![]() Muchas gracias, saludos. |
|
|
|
#2
|
||||
|
||||
|
Respuesta corta: Parece que una app no puede saber cuándo aprietas una tecla y cuándo la sueltas porque es un evento de muy bajo nivel que lo gestiona el sistema operativo directamente. Modificando el framework de Android o si el dispositivo tiene root entonces sí habría mecanismos.
Respuesta larga: Buena pregunta, parece que hay que escarvar bastante en el API de Android porque los eventos de bajo nivel del tipo tecla pulsada y tecla soltada están en el WindowManager, pero a partir de ahí se filtran y ya no vuelves a verlos, así que no es trivial hacer una app que detecte que una tecla está siendo pulsada. De hecho, diría que es imposible salvo que te metas a modificar la ROM del dispositivo o, si es root, accedas al registro de eventos por otro lado para interceptar las pulsaciones. El problema está en que parece que el último lugar donde Android expone esos eventos de bajo nivel es en el WindowManagerPolicy que intercepta los eventos del teclado con el método interceptKeyBeforeQueueing. Pero eso no puedes tocarlo en una app normal ya que es una implementación del sistema. Entonces tienes que modificar la implementación del framework de Android... que eso igual para un demostrador te vale si puedes modificar la ROM del sistema, pero desde luego para una app que quieras publicar en la Play Store y que la use cualquiera en su móvil no puedes evidentemente. Última edición por mocelet Día 11/03/18 a las 17:30:21 |
| Gracias de parte de: | ||
|
#3
|
||||
|
||||
|
Gracias por responder, se me ha ocurrido otra forma de la que podria hacerse, pero no estoy muy seguro de si se puede hacer.
Con una app de cliente-servidor, usar el móvil como servidor, y el pc como cliente a traves de wifi. Crear una interfaz sencilla accesible mediante navegador con los botones correspondientes a las acciones que deberia realizar el móvil, y que se activen al detectar una tecla del pc presionada. Así no hace falta modificar nada de la ROM, ya que la app del móvil solo tendria que hacer una acción al detectar el botón presionado(un simple boton que al pinchar con el dedo haga algo, pero activarlo desde el navegador, por ejemplo), no la tecla, y la parte complicada de hacer que el móvil detecte una tecla pulsada ya no estaría, estaria en el pc que es bastante mas sencillo. Pero tampoco se como de complicado seria hacer una app asi, que realmente seria muy muy sencilla, solo un par de acciones como la vibracion o reproducir algun sonido. No se si me he explicado. . Última edición por Pacomurso Día 11/03/18 a las 17:37:58 |
|
#4
|
||||
|
||||
|
A eso se llama pensar "out of the box", y ahora que lo dices, es posible que con una WebView y un javascript sí puedas registrar los eventos de tecla apretada (onkeydown) y tecla soltada (onkeyup) dentro de una app porque el navegador (o el WebView para el caso) sí debería pasar esos eventos al menos mientras el WebView tenga el foco, en cuanto lo pierda adiós, claro. Habría que hacer la prueba.
De hecho, con javascript puedes hacer vibrar el dispositivo y reproducir un sonido, no te hace falta ni siquiera una app, basta con una página web. Que luego si quieres la encapsulas como app con Apache Cordova o similar. EDIT: Estoy leyendo algunos temas donde parece que detectar las pulsaciones y cuáles son en navegador / WebView no funcionan como uno querría. Que tiene sentido, si el propio WindowManager ni siquiera genera el evento, ¿cómo va a saber el WebView que la tecla se ha soltado? EDIT 2: Prueba con esta página: http://unixpapa.com/js/testkey.html Te dice los eventos que se generan y puedes configurar algunos comportamientos. Puedes abrir la página con el dispositivo android en cuestión y ver si con el teclado externo o a través de teamviewer consigues generar los eventos que te interesan (keydown justo al apretar o de forma repetida si mantienes apretado y keyup una vez justo al soltar). Última edición por mocelet Día 11/03/18 a las 17:59:14 |
| Gracias de parte de: | ||
|
#5
|
||||
|
||||
|
Gracias, he visto la pagina esa, he intentado modificarla un poco pero era complicarse demasiado asique hice yo una, no es una maravilla pero cumple con las expectativas
La idea era poder controlar dos dispositivos al mismo tiempo desde el pc, y programar unas teclas para uno y otras para otro, que es la parte sencilla, pero no encuentro ninguna forma de controlar los dos al mismo tiempo. ¿Alguna idea? |
|
#6
|
||||
|
||||
|
La página era para comprobar si los eventos del teclado externo se reciben bien en el navegador (que al final no dices si sí o si no XD)
Si ahora además quieres controlar dos dispositivos a la vez con el mismo teclado ya es otro escenario totalmente distinto y sí que te hará falta mínimo un software en el PC para que distinga a quien tiene que enviar la orden y una app en cada dispositivo que la reciba y la ejecute. Y conexión permanente entre dispositivos y PC, con sockets TCP o un websocket. |
| Gracias de parte de: | ||
|
#7
|
||||
|
||||
|
Si si, funciona bastante bien, la única pega era que android no detecta el keypress de js, soló keydown y keyup y ocurren uno detrás de otro seguidamente, pero he hecho algún apaño y funciona incluso mejor de como esperaba XD.
Voy a buscar información sobre lo que me has dicho a ver si consigo encontrar algo. Que me parece que estoy empezando la casa por el tejado... XD |
| Respuesta |
Estás aquí
|
||||||
|
||||||
«
Tema Anterior
|
Siguiente tema
»
|
|
Hora actual: 03:56:33 (GMT +1)
HTCMania: líderes desde el 2007






