2011-11-07 11 views
6

Estoy tratando de activar la notificación LED, por ejemplo, el color verde. Apague la pantalla, y cada 5 segundos cambie ese color a rojo (verde -> rojo, rojo -> verde). Creo que he hecho todo: en un servicio creé un temporizador que ejecuta el método para mostrar la notificación.Cambiar el color de la notificación de LED cada 5 segundos

public class LEDService extends Service 
{ 
private boolean TimerStarted; 
private Timer timer; 
private NotificationManager myNotificationManager; 
private long LastColor; 

public TurnLedOn() 
{ 
    Notification notify = new Notification(); 
    notify.flags |= Notification.FLAG_SHOW_LIGHTS; 
    notify.LedOnMS = 500; 
    notify.LedOffMS = 0; 
    //I in other example I also used array of colors 
    if (LastColor == 0x00FF00) notify.LedARGB = 0xFF0000; else notify.LedARGB = 0x00FF00;   
    LastColor = notify.LedARGB; 
} 

private MyTimerTask extends TimerTask 
{ 
    @Override 
    public void run() 
    { 
     TurnLedOn(); 
    } 
} 

@Override 
public void OnCreate() 
{ 
    TimerStarted = false; 
    myNotificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) 
{ 
    if (TimerStarted == false) 
    { 
     timer = new Timer(); 
     timer.schedule(new MyTimerTask(), 0, 5000); 
    }   
    return START_STICKY; 
} 

@Override 
public IBinder onBind() 
{ 
    return null; 
} 

@Override 
public void onDestroy() 
{ 
    timer.close(); 
} 
} 

¿Cuál es el problema? El LED no cambia su color ... Cuando apago la pantalla, el color es verde hasta que enciendo la pantalla y la apago de nuevo. Quiero comenzar este servicio una vez, apague la pantalla y vea que la luz LED cambia de color :).

BTW: Probé mi teléfono y PUEDE mostrar luces verdes y rojas así que no es el problema.

Gracias de antemano y disculpe por mi inglés.

No puedo responder a mi propia pregunta, así que añadiremos esta aquí:

Gracias por sus sugerencias Olsavage, he añadido clearall() para mi código, pero el efecto sigue siendo el mismo ; /. También agregué el registro a mi aplicación (Log.i()). Parece que el sistema está deteniendo mi servicio cuando apago la pantalla (¿por qué?). Es algo así:

pantalla encendida: El temporizador está en marcha y la notificación se despliega (pero no veo llevado adelante, porque para ver que tengo que apagar la pantalla: P)

Haga clic en el botón de bloqueo: El temporizador está casi detenido, por lo que el LED algunas veces cambia de color una vez.

La pantalla está apagada: El temporizador no funciona, el método TurnLedOn ya no se está ejecutando. LED no cambia de color

Ahora la pregunta es: ¿por qué mi servicio se detiene después de apagar la pantalla? Incluso cuando estoy haciendo una operación simple en él (como incrementar una variable). Tal vez tengo que establecer su prioridad o algo así?

Cambié el intervalo del temporizador a 100ms y veo que el código es bueno. El LED cambió los colores por 5-15 veces, pero luego se detuvo inmediatamente. Sé que esta aplicación es completamente inútil, pero solo quiero que funcione :).

EDIT2: Creo que tendré que usar AlarmManager y PendingIntent para iniciar mi servicio ... Mañana intentaré hacer eso.

Respuesta

1

Debe usar el formato ARGB. Intente configurar 0xFFFF0000 - rojo y 0xFF00FF00 - verde. Espero que esto ayude.

Hm, ¿tal vez su notificación anterior no se borró? Intenta usar myNotificationManager.clearAll(); Antes de myNotificationManager.notify (0, notificar);

Ah, también, intente configurar notify.ledOffMS = 5000;

+0

Ya muestra el color correcto :) El problema es que no cambia de color cuando la pantalla está apagada. Para cambiar el color, tengo que girar la pantalla de mi teléfono y apagarlo ... Quiero cambiar el color automáticamente. – krzysnick

2

De acuerdo, creo que lo descubrí. Se eliminó el temporizador en absoluto. En su lugar, uso AlarmManager :).

he añadido a alcrear siguiente código:

alarmmgr = (AlarmManager) getSystemService(ALARM_SERVICE); 

en onStartCommand:

public int onStartCommand(Intent intent, int flags, int startId) 
{ 
TurnLedOn(); //Turn LED On 
myPendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent. FLAG_UPDATE_CURRENT); 
alarmmgr.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+5000, myPendingIntent); //Setting alarm to be off after 5seconds. 
return Service.START_NOT_STICKY; 
} 

en OnDestroy:

public void onDestroy() 
{ 
notifymgr.cancel(LED_NOTIFICATION_ID); //Clearing notification 
alarmmgr.cancel(myPendingIntent); //Clear alarm 
} 

Creo que el código está bien, pero estoy totalmente principiante en Programación de Android. Creo que resolví mi problema.