aplicacion en java y camara
Hola, es correcto que al usar la camara del movil (i275), no se puede estar ejecutando una aplicacion de java en paralelo?. De ser asi, existen otras limitaciones que paren la ejecucion de mi aplicacion, ya sean llamadas entrantes,salientes, etc.
Si me pueden facilitar esta informacion se los agradeceria, o si hay algun link para informarme en su defecto.
Saludos
Dario
Dario,
Por lo que sé, no existe tal limitación por definición (osea, no hay ninguna especificación que dice que definitivamente una acción previene la otra). Dicho eso, es posible que, por el hecho que el i275 no es un equipo con gran cantidad de recursos de memoria, al ejecutar una aplicación con cámara otra aplicación resulte con pocos recursos y que éstos no le alcanzen para hacer lo que debe.
Dicho de otra manera -- puede ser que un MIDlet que usa la cámara en el i275 interfiera con una aplicación que esté en el fondo, pero si eso ocurre no se debe a que la especificación así lo indique, sino a que lo que esté haciend la aplicación activa está consumiendo una gran cantidad de recursos.
En términos de cosas que paran la ejecución de tu aplicación -- en realidad, no hay nada que para la aplicación (es decir, que la bloquean por completo), pero sí hay cosas que pueden hacer que ésta pierda el frente (foreground) o que limiten su acceso a enviar datos por la red temporalmente.
Separemos dos cosas.
Eventos que causan que la aplicación entre en pausa: Al estar suspendida (en el estado pauseApp() ) una aplicación Java aún tiene acceso a continuar operando. Puede continuar haciento cálculos, obteniendo coordenadas de GPS, enviando datos por la red, etc. Lo único que no puede hacer la aplicación en pausa es dibujar en la pantalla o tener control del parlante para ejecutar tonos.
Eventos que previenen que cualquier servicio en el equipo envíe datos: Si hay comunicación de voz (por radio o teléfono) no puede haber transmisión de datos simultánea de ningún tipo -- por diseño, ya que podrías imaginarte una situación en la cual un equipo estaría bloqueado de recibir llamadas porque hay una aplicación con una conexión eterna..
Los servicios de voz tiene precedencia en el equipo sobre todas las actividades (Java, WAP, SMS, etc.) y siempre que entra una llamada lo que esté haciendo el usuario será interrumpido para que éste pueda elegir contestar o no llamada. No importa si la aplicación está en el fondo o en el frente.
En el caso en que la aplicación esté enviando datos y entra una llamada, la aplicación tiene una oportunidad de cerrar la conexión limpiamente (porque el sistema Java invoca el método pauseApp() de la aplicación, el cual le permite a la aplicación cerrar limpiamente su actividad). Si una aplicación está en el fondo y hay una llamada de voz, la aplicación no podrá abrir la conexión de datos hasta que la llamada termine.
Si una aplicación en el fondo está usando el GPS y está operando en modo asistido, no podrá obtener una coordenada mientras haya una llamada, ya que el modo asistido usa la red para decirle al equipo qué satelites están cerca. Si una aplicación usa el GPS en modo autónomo, esto no lo afecta, ya que no requiere usar la red de datos para obtener un par de coordenadas (esto ya entra en más detalles de los que valen para este ejemplo).
Ojo -- esto aplica para los equipos Nextel de Motorola y para los BlackBerry. En otros equipos Java de otros operadores, es posible que una aplicación que esté en el fondo no pueda hacer otras operaciones (caso de la mayoría de equipos Samsung on LG, por ejemplo, o de varios equipos Motorola en GSM). Eso ya dependerá del equipo, modelo, etc. Pero para los equipos Nextel con Java, lo que mencioné arriba aplica sin variación.
Espero que esto ayude.
Juan Felipe
Estimado Juan Felipe,
Según se desprende de tus comentarios hechos hace más de un año, no puede obtenerse una posición en modo asistido durante el transcurso de una llamada. Podrías indicarme como obtener una posición en modo autónimo exclusivamente, sin hacer uso del modo asistido por favor? No encontramos la forma de seleccionar los distintos modos de pedido de posiciones.
Muchas gracias,
Walter Sonnenberg
Gerente Técnico
Nusoft S.A.
Hola Walter,
El truco está en la diferencia entre delay=low y delay=high.
Tres principios básicos:
1 - cuando se está transmitiendo datos, no se puede usar el servicio de voz
2 - cuando se está usando el canal de voz, no se pueden transmitir datos.
Al hacer una conexión al chip GPS usando delay=low, el equipo primero inicia una conexión al servidor de asistencia en la red de Nextel, el cual le anticipa el almanaque necesario para hacer el cálculo de posición con GPS. Esa transacción demora unos pocos segundos, y de ahí se inicia la localización propiamente dicha. Como usa el canal de datos, una llamada a getPosition() con delay=low se bloquea hasta que se puedan transmitir datos -- y se queda esperando hasta que se libere el canal de voz o hasta el timeout de 32 segundos.
delay=high no inicia esa conexión, pero puede demorar mucho más en obtener una localización si no se ha hecho anteriormente (recientemente) una petición con delay=low.
Entonces, la recomendación es hacer la primera localización con delay=low y las que siguen después de esa con delay=high hasta que comienzen a fallar (FIX_NOT_ATTAINABLE) por unos 5 o 10 intentos, esperar 15 segundos y luego comenzar con delay=low nuevamente. Eso te permite manejar no sólo la condición de interrupción por voz -- también te ayuda con las condiciones sub-optimas. Si la primera llamada con delay=low falla, intentar de nuevo con delay=low hasta que te dé un resultado.
Saludos,
Juan Felipe

Joined: 2007-03-13