PDA

Ver la Versión Completa : Dejar una aplicación siempre en primer plano


Kalikatres
23-11-2015, 19:41:59
Hola a todos y enhorabuena por esta magnífica página.

Estoy 'retomando' el Delphi y desarrollando una aplicación para Windows/Android y no sé como resolver una cuestión que seguro que es muy tonta.

En Android, mientras se me ejecuta la aplicación se me apaga la pantalla y el teléfono móvil se bloquea al rato de estar ejecutándola, teniendo que volver a desbloquear la pantalla para volver a la aplicación, (este es el comportamiento normal del teléfono móvil).

¿Cómo hago para que la aplicación esté siempre en primer plano y que no se apague la iluminación de la pantalla?

Y ya puestos...¿Cómo mandar a aplicación a segundo plano apagando la pantalla y que vuelva a primer plano y se ilumine la pantalla si ocurre un evento determinado?

Muchas gracias a todos por vuestro tiempo y perdonad por mi ignorancia.

mamcx
23-11-2015, 19:52:36
Eso es un comportamiento errado en una plataforma movil, y hostil contra el usuario. Va ser muy dificil justificar el porque quieres hacer eso.

Kalikatres
23-11-2015, 20:03:04
Hola Mamcx

Simplemente quiero que la aplicación funcione como un navegador, Tomtom, Sygic, etc. que te muestre constantemente dónde estás. Y si te acercas a un hito concreto te advierta del tiempo que llevas desde la última vez que pasaste por ahí, la aplicación es un medidor de tiempos por vuelta para un Kart que se compara con otro Kart también en pista. Además quiero que el piloto vea constantemente el tiempo que está haciendo en la vuelta.

Casimiro Notevi
23-11-2015, 20:12:04
Un GPS no es muy apropiado para eso. En todo caso te sirve para aprender cómo hacer un programita así, pero nada más.

Kalikatres
23-11-2015, 20:28:17
Sé que no es lo más adecuado, pero son los mimbres que tengo para hacer el cesto. Si tenéis alguna sugerencia para mejorar la aplicación os estaré agradecidísimo, sobre todo eso, poder dejar la pantalla activa constantemente.

Casimiro Notevi
23-11-2015, 20:36:23
Busca por PhoneWakeState, creo recordar.

AgustinOrtu
23-11-2015, 23:59:46
Este tema (http://www.clubdelphi.com/foros/showthread.php?t=88859)

Neftali [Germán.Estévez]
24-11-2015, 11:31:19
En Android, mientras se me ejecuta la aplicación se me apaga la pantalla y el teléfono móvil se bloquea al rato de estar ejecutándola, teniendo que volver a desbloquear la pantalla para volver a la aplicación, (este es el comportamiento normal del teléfono móvil).

Eso es un comportamiento errado en una plataforma movil, y hostil contra el usuario. Va ser muy dificil justificar el porque quieres hacer eso.

Yo creo que en este caso es el acertado. Cualquier aplicación de seguimiento de rutas por GPS debe comportarse así. Apagar la pantalla sería un funcionamiento incorrecto.
Es, por ejemplo, lo que hace Maps (aplicación para móviles); Que por cierto funciona muy bien. O infinidad de otras como runastic, endomondo, el propio tracks de google,...

Simplemente quiero que la aplicación funcione como un navegador, Tomtom, Sygic, etc. que te muestre constantemente dónde estás. Y si te acercas a un hito concreto te advierta del tiempo que llevas desde la última vez que pasaste por ahí, la aplicación es un medidor de tiempos por vuelta para un Kart que se compara con otro Kart también en pista. Además quiero que el piloto vea constantemente el tiempo que está haciendo en la vuelta.

Me parece muy interesante.
Lo único que tendrás que tener en cuenta, es que la fiabilidad del GPS sea buena.
Según los modelos y el precio (como es normal) de los receptores GPS de los móviles tienen más o menos sensibilidad y por lo tanto más o menos exactitud.

No estaría de más hacer una prueba empírica con un móvil, para ver realmente si las posiciones, tiempo y velocidad son correctas (o con poco márgen de error).

Las mediciones GPS tendrán que ser con muy poco lapso de tiempo, dado que la velocidad es alta y la posición en cada momento no sigue un trazado recto (más bien todo lo contrario), como podría ser en un recorrido de coche (para el que utilizarías google maps).

Un GPS no es muy apropiado para eso. En todo caso te sirve para aprender cómo hacer un programita así, pero nada más.

Realmente no hay otra forma de hacerlo. Si la sensibilidad es buena (**), puedes tener en cada momento localización, velocidad, tiempos de vuelta,...
Eso sí, me queda esta duda (**).

Casimiro Notevi
24-11-2015, 11:39:36
Realmente no hay otra forma de hacerlo. Si la sensibilidad es buena (**), puedes tener en cada momento localización, velocidad, tiempos de vuelta,...
Eso sí, me queda esta duda (**). Si es para algo profesional, una competición o algo así, no sirve. Cualquier carrera de vehículos van demasiado rápido como para que un GPS (de los que nos venden a nosotros) sea lo suficientemente preciso y rápido como para controlar esos lapsos de tiempos. Imagina una carrera en la que dos vehículos llegan casi juntos, donde la diferencia se mide en décimas o centésimas de segundos (incluso en milésimas, a veces), es imposible con un GPS controlar eso.
Por eso digo que si es a modo didáctico o para "carreras entre amigos", sí. Pero profesionalmente, no sirve.

Neftali [Germán.Estévez]
24-11-2015, 11:44:44
Si es para algo profesional, una competición o algo así, no sirve. Cualquier carrera de vehículos van demasiado rápido como para que un GPS (de los que nos venden a nosotros) sea lo suficientemente preciso y rápido como para controlar esos lapsos de tiempos.

Correcto.
A ese nivel de precisión no sirve.
Pero para velocidades y tiempos por vuelta (nunca hablando de milésimas) puede dar algo aproximado.

Si lo que se necesita está a ese nivel, tal y como dice Casimiro deberás pensar en otra cosa.

Casimiro Notevi
24-11-2015, 11:52:54
De todas formas, creo recordar que en los ajustes de preferencias de android se puede cambiar para que la pantalla no se apague nunca :)

¿Cómo hago para que la aplicación esté siempre en primer plano y que no se apague la iluminación de la pantalla?

Neftali [Germán.Estévez]
24-11-2015, 14:00:47
Por aquí hablan del tema (http://stackoverflow.com/questions/28454408/allowing-mobile-application-not-to-go-sleep-mode-using-delphi-xe7).

Necesitarás asignar a tu aplicación algún permiso especial para poder hacerlo.
Por aquí también información de Android (http://stackoverflow.com/questions/3723634/how-do-i-prevent-an-android-device-from-going-to-sleep-programmatically), que te puede dar pistas de por dónde buscar.

Para iOS también puedes encontrar alguna cosa por aquí (http://www.malcolmgroves.com/blog/?p=1387).

mamcx
24-11-2015, 18:44:11
Por eso digo que si es a modo didáctico o para "carreras entre amigos", sí. Pero profesionalmente, no sirve.

De hecho me arriesgo a especular que no sirve ni de forma amateur.

Correccion, CONFIRMO: Probe con un iPhone 6 (que tendra un GPS mejor que muchos androids) y ni a palos es la forma de hacer esto.

1- GPS en espacios cerrados es bien conocido que no tienen precision, e incluso por fuera:

http://www.gps.gov/systems/gps/performance/accuracy/

Que se traduce, por ejemplo, en las mejores condicione posibles (cielo abierto y claro) en algo asi como +/- 10 mts de precision, y no se garantiza que sea asi.

Hice un recorrido con el iPhone por mi casa (del tamaño de una pista de karts dentro de un edificio) y ademas que no siempre es preciso, hay un lag notable entre donde estoy y donde reporta.

La solucion es usar "indoor positioning".

http://techcrunch.com/2014/06/05/apple-using-m7-motion-processor-for-indoor-positioning-with-ios-8/

Es maso simple el concepto:

1- Tienes GPS
2- Pero ademas tienes sensores internos (los que determinan que has girado el aparato, por ejemplo) que puedes usar para triangular desde un punto fijo y conocido, lo cual haria mas preciso todo. En el caso de los modelos nuevos de iPhone, tienen un co-procesador dedicado para esto

en iPhone hay el sistema de iBeacons que convierte el aparato en un punto de esos y transmite usando Bluethoot, y tambien se usa para estas cosas.

Deberas chequear que modelos de android darian para esto (o usar iPhones)

Asi que la solucion es usar triangulacion desde un punto fijo, y cambiar de GPS a beacons o calcular usando los sensores de movimiento del aparato. No es tan dificil como suena... (o al menos no en iOS. No manejo tanto android como pa saber exactamente por donde dirigirte :()

movorack
24-11-2015, 19:23:16
De todos modos aquí tienes un link donde hablan de como mantener la pantalla encendida.

http://stackoverflow.com/questions/8442079/keep-the-screen-awake-throughout-my-activity

jhonny
24-11-2015, 19:34:32
Asi que la solucion es usar triangulacion desde un punto fijo, y cambiar de GPS a beacons o calcular usando los sensores de movimiento del aparato. No es tan dificil como suena... (o al menos no en iOS. No manejo tanto android como pa saber exactamente por donde dirigirte :()

No tengo mucho para aportar aparte de lo que ya se ha comentado en este hilo, solamente decir que estoy de acuerdo con que sería mejor usar Beacons, de hecho las últimas versiones de Delphi tienen unos componentes que hacen facil la programación de los mismos, incluso han desarrollado una herramienta llamada BeaconFence muy interesante para estos casos http://www.embarcadero.com/es/products/beaconfence, quizá te sirva de algo.

AgustinOrtu
24-11-2015, 20:41:32
En teoria hay un componente que permite convertir cualquier aparato en un Beacon

Ver TBeaconDevice (http://docwiki.embarcadero.com/Libraries/Seattle/en/System.Beacon.Components.TBeaconDevice) y Using Beacons (http://docwiki.embarcadero.com/RADStudio/Seattle/en/Using_Beacons)

Obvio que ese "aparato" tiene que tener Bluetooth.

Despues es cuestion de obtener y transmitir la data, pero la parte de broadcasting ya estaria resuelta

Kalikatres
27-11-2015, 12:14:59
Hola a todos!

Sigo en ello. Ya lo he probado y el GPS me da la suficiente precisión para lo que quiero, así que sigo adelante.

Veo que el form tiene un evento 'OnSaveState' que me anticipa que la pantalla se va a apagar y que la app pasa a segundo plano, así puedo guardar datos si es pertinente. ¿Se os ocurre como mandar la pantalla a primer plano y encender la misma?

Gracias a todos por la paciencia de aguantarme el rollo este.

Neftali [Germán.Estévez]
27-11-2015, 13:26:03
Por lo que vi en la demo del otro día, creo que la precisión de beacons y la velocidad de respuesta tampoco sería aceptable para la situación que estamos tratando.

Para ir caminando y detectando diferentes sensores sí, pero para velocidades más altas creo que no. Habría que ver si hay sensores con más precisión.


Mirad este ejemplo, (https://www.youtube.com/watch?v=MK7ImQg7ifU)que han realizado la gente de Embarcadero en Elche, para mostrar el funcionamiento de beaconfence. A partir del minuto 41:30 hacen un recorrido por su propia oficina con un plano y en la parte superior se ve cómo se hace la detección del movimiento sobre el propio plano (nos la hicieron en persona en Barcelona).

La detección es bastante exacta (contando que tienen bastantes sensores) pero tiene algo de "delay".

Kalikatres
28-11-2015, 14:43:15
He encontrado una solución, no es muy elegante pero funciona hasta que me pueda meter más a fondo con el tema.

Hay una APP en Android llamada Stay Alive con la que puedes programar el comportamiento de la pantalla según la aplicación que arranques.

No es lo mejor, pero por lo menos sigo adelante.

Gracias a todos.

AgustinOrtu
28-11-2015, 17:48:47
Veo que el form tiene un evento 'OnSaveState' que me anticipa que la pantalla se va a apagar y que la app pasa a segundo plano, así puedo guardar datos si es pertinente. ¿Se os ocurre como mandar la pantalla a primer plano y encender la misma?

Es que no me termina de cerrar lo que queres hacer :confused:

Si yo estoy con mi "cacharro Android" usando tu aplicacion, y quiero mandarla a segundo plano para leer un WhatsApp, vos me lo queres impedir mandando tu app a primer plano?? Como hago para salir de tu programa? Estoy de acuerdo con mamcx, no es lo esperado y encima muy hostil

No deberias "mantener siempre en primer plano algo" en ninguna plataforma, en ningun sistema operativo, porque eso es algo que maneja el usuario, cuando yo tengo ganas de leer este foro, traigo a primer plano el Chrome y leo el foro, imaginate como seria si Delphi no me deja minimizar o se "pone en primer plano" y yo no puedo entrar al foro :mad:

Lo de mantener la pantalla encendida es otra cosa totalmente distinta y en este caso si podria llegar a ser algo deseable, por ejemplo los reproductores lo hacen y algunos lectores de archivos tambien. Han dejado algunos enlaces por ahi arriba, ninguno sirve?