PDA

Ver la Versión Completa : [ CONSULTA ] Pausar/controlar servicio en un Widget con pantalla apagada y actualización forzada


mpiero
04/02/15, 10:48:34
Hola a todos,
Escribo este hilo ya que soy novato en programación en Android, estoy empezando, aunque tengo amplia experiencia en programación en varios lenguajes...
El caso es que he creado mi primer widget, para empezar he optado por un reloj digital.

Si quereis verlo/probarlo el enlace es:
https://play.google.com/store/apps/details?id=com.digitalclocksimplicity.android.widg et

Es gratuito.
Es bastante simple, hora minutos y fecha y se le puede asignar una acción a cada una de ellas de forma independiente. También se puede cambiar la tipografía, y espero en próximas versiones que también se pueda elegir un skin.

Dudas me van surgiendo bastantes, pero googleando las voy solucionando.
Pero ahora me ha surgido un par de ellas que no he obtenido respuesta.

Resumo a groso modo la estrutura que tiene la app para luego preguntar.
La app consta de un Activity principal que es el que permite configurar el widget:
public class AccionesActivity extends Activity {
...
}, luego tiene otros Activity secundarios, un AppWidgetProvider que es el que se encarga de actualizar el wiget periodicamente mediante un Service (primero use un timer, pero a veces se trababa y no se actualizaba, googleando vi la posibilidad de crear un servicio y ahora si funciona bien):
public class Digital_Clock_Simplicity extends AppWidgetProvider {
...
public static final class UpdateService extends Service {
...
}
...
}
1) Bien mi 1a duda es, cuando apago la pantalla del tfno, el servicio sigue ejecutándose, pero me imagino que intentará o actualizará el reloj igual aún con la pantalla apagada ¿como puedo hacer para que en el widget se detecte si la pantalla está apagada y no se actualize el widget? O incluso igual se puede pausar el servicio mientras la pantalla esta apagada y reanudarlo cuando se encienda...
Con el betterbattery stats he visto además que el wiget ha provocado bastantes wakelock mientras la pantalla estaba apagada, lo cual en este caso no tiene sentido...

2) Actualización del aspecto del widget. ¿Como puedo forzar la actualización del widget al cambiar la configuración? El Activity lo que hace es permitir configurar el widget, elegir la tipografía, las acciones al pulsar en hora y minutos y fecha,..., el tema es que, una vez que he cambiado algo del aspecto, para forzarlo a actualizar el widget, lo que he hecho es, en la clase AppWigetProvider he creado una función que actualiza el aspecto:
public class Digital_Clock_Simplicity extends AppWidgetProvider {
...
public static void ActualizaReloj(Context context) {
// TODO Auto-generated method stub
relojcambiado=true;
context.startService(new Intent(UpdateService.ACTION_UPDATE));
}
...
}Y luego en el Activity hago:
public class AccionesActivity extends Activity {
...
@override (http://www.htcmania.com/member.php?u=42589)
protected void onStart() {
super.onStart();
com.digitalclocksimplicity.android.widget.Digital_ Clock_Simplicity.ActualizaReloj(this);
}
...
}Es decir llamo a la función de AppWidgetProvider para forzar a actualizar los cambios en pantalla, y aunque funciona, no se si esto es correcto o se podría hacer de otra manera.

Gracias de antemano y saludos a todos.

mpiero
11/02/15, 21:24:53
Nadie??