2011-11-07 10 views
6

Sto tentando di attivare la notifica LED, ad esempio il colore verde. Spegni lo schermo e ogni 5 secondi cambia colore in rosso (verde-> rosso, rosso-> verde). Penso di aver fatto tutto: in un servizio ho creato un timer che esegue il metodo per visualizzare la notifica.Modifica del colore della notifica LED ogni 5 secondi

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(); 
} 
} 

Qual è il problema? Il LED non cambia colore ... Quando spengo lo schermo, il colore è verde finché non accendo lo schermo e lo spengo di nuovo. Voglio iniziare questo servizio una volta, spegnere lo schermo e vedere la luce LED che cambia colore :).

BTW: Ho provato il mio telefono e può mostrare luci verdi e rosse, quindi non è il problema.

Grazie in anticipo e mi dispiace per il mio inglese.

non posso rispondere alla mia domanda quindi mi aggiungere questo qui:

Grazie per i vostri suggerimenti Olsavage, ho aggiunto ClearAll() per il mio codice, ma l'effetto è sempre lo stesso ; /. Ho anche aggiunto la registrazione alla mia applicazione (Log.i()). Sembra che il sistema interrompa il servizio quando spengo lo schermo (perché ??). E 'una cosa in questo modo:

schermo acceso: Il timer è in funzione e la notifica viene distribuito (ma non riesco a vedere led acceso, perché per vederlo devo spegnere lo schermo: P)

Fare clic sul pulsante di blocco: Il timer è quasi fermo, quindi il LED a volte cambia colore una volta.

Schermo spento: Il timer non funziona, il metodo TurnLedOn non è più in esecuzione. Il LED non cambia i colori.

Ora la domanda è: perché il servizio viene interrotto dopo aver spento lo schermo? Anche quando sto facendo una semplice operazione in esso (come l'incremento di una variabile). Forse dovrò impostare la sua priorità o qualcosa del genere?

Ho cambiato l'intervallo del timer a 100 ms e vedo che il codice è buono. Il LED ha cambiato i colori per 5-15 volte, ma poi si è fermato immediatamente. So che questa applicazione è completamente inutile ma voglio solo lasciarla funzionare :).

EDIT2: Penso che dovrò usare AlarmManager e PendingIntent per avviare il mio servizio ... Domani proverò a farlo.

risposta

1

È necessario utilizzare il formato ARGB. Prova a impostare 0xFFFF0000 - rosso e 0xFF00FF00 - verde. Spero che questo ti aiuti.

Hm, forse la tua vecchia notifica non è stata cancellata? Prova ad usare myNotificationManager.clearAll(); Prima di myNotificationManager.notify (0, notifica);

Oh, anche, prova a impostare notify.ledOffMS = 5000;

+0

Visualizza già il colore giusto :) Il problema è che non cambia colore quando lo schermo è spento. Per cambiare colore devo girare lo schermo del mio telefono e spegnerlo ... Voglio cambiare colore automaticamente. – krzysnick

2

Ok, penso di aver capito. Rimosso il timer a tutti. Invece io uso AlarmManager :).

ho aggiunto al onCreate seguente codice:

alarmmgr = (AlarmManager) getSystemService(ALARM_SERVICE); 

in 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; 
} 

in OnDestroy:

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

Credo che il codice è ok, ma io sono totalmente principiante in Programmazione Android. Penso di aver risolto il mio problema.

Problemi correlati