2010-06-27 12 views
9

Desidero che un evento venga attivato ogni ora (alle 5:00, alle 6:00, alle 7:00, ecc.). Ho provato con un persistente servizio in background con un filo, ma non era la soluzione giusta a causa di:AlarmManager - Come si ripete un allarme nella parte superiore di ogni ora?

  • consumo della batteria cessazione servizio
  • , a causa della gestione della memoria Android

Così ho' sto provando con AlarmManager. Funziona se si attiva un allarme in X secondi (usando il metodo "set"). Ma come posso ripetere un evento (usando il metodo "setRepeating") all'inizio di ogni ora, finché l'allarme non viene cancellato?

Grazie!

risposta

15

Quando si impostano gli allarmi, ci sono due volte: la prima volta del trigger e l'intervallo successivo del trigger.

È quindi necessario calcolare i millisecondi rimanenti fino alla successiva ora superiore, quindi impostare un'ora per l'intervallo di ripetizione.

// We want the alarm to go off 30 seconds from now. 
long firstTime = SystemClock.elapsedRealtime(); 
firstTime += remainingMilisecondsToTopHour; 
long a=c.getTimeInMillis(); 

// Schedule the alarm! 
AlarmManager am = (AlarmManager)ctx.getSystemService(Context.ALARM_SERVICE); 
am.setRepeating(AlarmManager.ELAPSED_REALTIME, 
c.getTimeInMillis(), 1*60*60*1000, sender); 
+0

Ok, questo è l'approccio corretto. Grazie;) – daliz

+1

+1 Bella risposta. Mi hai salvato la giornata. Grazie mille! Grazie ancora. – Sajmon

+6

Questo codice sembra un po 'oscuro. da dove viene la c? perché è un creato, quindi mai usato? –

Problemi correlati