Avisos

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

Respuesta
 
Herramientas
  #1  
Viejo 21/08/13, 13:37:40
Array

[xs_avatar]
daniel_gs daniel_gs no está en línea
Usuario novato en la web
 
Fecha de registro: ago 2011
Mensajes: 20
Modelo de smartphone: lg gw620
Tu operador: Movistar
Servicios y tareas en segundo plano.

Hola a todos:

Estoy haciendo una aplicación con alarmas, en un principio estas no sonaban si eran programadas para dentro de mas de media hora. Busque información y encontré que para que funcionara en segundo plano de forma indefinida debía crear un servicio, lo cree y ahora cuando cierro la aplicación, incluso cuando la cierro con el menú que sale con la presión prolongada sobre la casita, y la vuelvo a abrir la aplicación sigue funcionando como debería. El problema es que cuando programo una alarma para dentro de 7 horas, osea para dentro de mucho tiempo, no llegan a sonar y efectivamente cuando abro la aplicación veo que ya no funciona a pesar de que si miro en el administrador de tareas la aplicación se seguía ejecutando.

¿Alguien tiene alguna idea de que debo hacer? Estoy desesperado. Muchas gracias.

Última edición por daniel_gs Día 22/08/13 a las 18:48:29.
Responder Con Cita


  #2  
Viejo 21/08/13, 15:48:57
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
A mi asignando un PendingIntent al AlarmManager me funciona perfectamente.

Prueba así.
Responder Con Cita
  #3  
Viejo 21/08/13, 17:07:06
Array

[xs_avatar]
daniel_gs daniel_gs no está en línea
Usuario novato en la web
 
Fecha de registro: ago 2011
Mensajes: 20
Modelo de smartphone: lg gw620
Tu operador: Movistar
no uso alarmmanager lo hago con un handler, donde deberia poner el PendingIntent, podriais poner un ejemplo.

My codigo es tal que asi:

Codigo del servicio:
 Cita:
@Override
public int onStartCommand(Intent intenc, int flags, int idArranque) {
Runnable r = new RingRing(time, mp, v);
new Thread(r).start();
return START_STICKY;
}
Codigo del hilo "RingRing":

 Cita:
public class RingRing implements Runnable {

private Handler hCd = new Handler();
private long time;
private MediaPlayer mp;
private Vibrator v;

public RingRing(long time, MediaPlayer mp, Vibrator v) {
this.time = time;
this.mp = mp;
this.v = v;
}

public void run() {
System.out.println("RingRing: " + time);
hCd.removeCallbacks(hCdHand);
hCd.postDelayed(hCdHand, time);
}

private Runnable hCdHand = new Runnable() {

public void run() {
if (!mp.isPlaying()){
mp.start();
v.vibrate(mp.getDuration());
}
}
};
}
Responder Con Cita
  #4  
Viejo 21/08/13, 17:23:06
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Un Handler se ejecuta dentro de la propia aplicación, si el contexto de la aplicación deja de existir (porque Android lo elimina de memoria) ya no se ejecuta.

Ejemplo con AlarmManager:

Intent intent = new Intent(this, ACTIVITY_QUE_QUIERES_EJECUTAR.class);

PendingIntent pi=PendingIntent.getBroadcast(this, 0, intent, 0);

AlarmManager am=(AlarmManager) getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+TIEMPO, pi);

Cosas del código:

- ACTIVITY_QUE_QUIERES_EJECUTAR: Es obvio

- TIEMPO: Número de milisegundos desde el momento actual en el que quieres que se lance la activity.

- AlarmManager.RTC_WAKEUP: Esto significa que la Activity se ejecutará aunque el móvil esté en modo Sleep. El móvil se despertará para ejecutarla. En su lugar puedes usar AlarmManager.RTC, que lo que hace es que sólo se ejecutará si el móvil está despierto, en el caso de estar durmiendo se ejecutará la próxima vez que el móvil se despierte.
Responder Con Cita
  #5  
Viejo 21/08/13, 17:45:07
Array

[xs_avatar]
daniel_gs daniel_gs no está en línea
Usuario novato en la web
 
Fecha de registro: ago 2011
Mensajes: 20
Modelo de smartphone: lg gw620
Tu operador: Movistar
¿pero no se supone que el servicio no deja de existir asta que lo paras?

El servicio que hago tiene dos funciones, la de poner la alarma en marcha y la de guardar las variables para iniciar la aplicacion cuando esta se elimina. Y no hace ninguna de las dos si pasa mucho tiempo.

¿Y si en un futuro no quisiera iniciar una alarma tras x segundos si no una serie de metodos?
Responder Con Cita
  #6  
Viejo 21/08/13, 19:52:55
Array

[xs_avatar]
rafaxplayer rafaxplayer no está en línea
Miembro del foro
 
Fecha de registro: jun 2013
Localización: en la barcelona media
Mensajes: 224
Modelo de smartphone: LG-E610
Tu operador: Orange
Yo uso servicio, y si... , se ejecuta aunque la aplicación no este activa , pero en tu código no veo la clase Service por ningún sitio, es un handler como dice kriogeN.
Responder Con Cita
  #7  
Viejo 21/08/13, 20:07:49
Array

[xs_avatar]
daniel_gs daniel_gs no está en línea
Usuario novato en la web
 
Fecha de registro: ago 2011
Mensajes: 20
Modelo de smartphone: lg gw620
Tu operador: Movistar
 Cita: Originalmente Escrito por rafaxplayer Ver Mensaje
Yo uso servicio, y si... , se ejecuta aunque la aplicación no este activa , pero en tu código no veo la clase Service por ningún sitio, es un handler como dice kriogeN.
Pero es el servicio el que ejecuta el hilo que ejecuta el handler, el servicio es el primer codigo, bueno es parte del servicio, puse solo el metodo onStartCommand.
Responder Con Cita
  #8  
Viejo 21/08/13, 21:17:26
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
No se donde leí que los servicios actúan en nombre de la Activity que los llamó. Así que de ser cierto estarías añadiendo el Handler a la cola de mensajes de la Activity, que fijo que en 7 horas va a estar destruidísima, y por tanto la cola de mensajes se vacía y no se ejecuta.

De todas formas estás haciendo un mal uso de servicios, no están pensados para lo que tú quieres hacer, para eso precisamente existe el AlarmManager.
Responder Con Cita
  #9  
Viejo 22/08/13, 18:47:43
Array

[xs_avatar]
daniel_gs daniel_gs no está en línea
Usuario novato en la web
 
Fecha de registro: ago 2011
Mensajes: 20
Modelo de smartphone: lg gw620
Tu operador: Movistar
Bueno al final lo solucioné.

Basta con hacer que el servicio habra un hilo y este compruebe mediante un bucle cuanto tiempo lleva funcionando desde que se inicio el bucle. De esta forma el servicio no termina hasta que no termina el bucle, usando el handler el servicio termina cuando deja de hacer cosas despues de un rato, aunque haya programado un handler.

Muchas gracias a todos.
Responder Con Cita
  #10  
Viejo 22/08/13, 20:57:59
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Eso es una máquina de chupar batería que da gusto, no se porque te complicas la vida con eso cuando Android te da herramientas específicas para lo que quieres hacer.

Es como querer comunicarte con un servidor web y en vez de usar un HttpClient crear un Socket y mandar los paquetes HTTP a pelo.
Responder Con Cita
  #11  
Viejo 22/08/13, 22:14:31
Array

[xs_avatar]
daniel_gs daniel_gs no está en línea
Usuario novato en la web
 
Fecha de registro: ago 2011
Mensajes: 20
Modelo de smartphone: lg gw620
Tu operador: Movistar
jejeje porque usando AlarmManager solo puedo poner alarmas y de mi forma puedo implementar que se ejecute un metodo cuando quiera.

¿De todas maneras hay alguna forma de ver el codigo fuente de la clase AlarmManager?
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 09:28:50 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /