Vorrei raggiungere questo obiettivo:notifiche quotidiane ad una certa ora
Dopo la prima svolta sulla domanda, l'utente riceve le notifiche, ogni giorno alle 02:00, se certa condizione è vera. Se la condizione è falsa, non stiamo mostrando una notifica questo giorno. La condizione è verificata alle 14:00, scarica alcuni dati da Internet.
Finora ho utilizzato AlarmManager e il suo metodo setRepeating() con intervallo di 24 ore. AlarmManager attiva un Service. In questo servizio sto scaricando i dati, controllando le condizioni e se è vero - mostrando Notification. Poiché il download può durare più di 5 secondi, ho dichiarato android:process=":background"
per questo servizio, per eseguirlo in un processo separato e non bloccare l'interfaccia utente.
Questo approccio presenta due inconvenienti:
1: Se l'utente apre l'applicazione diciamo a 4pm (e la condizione è vera), riceverà la notifica immediatamente. Da setRepeating() documentazione:
Se si verifica il tempo nel passato, l'allarme verrà attivato immediatamente, con un conteggio di allarme a seconda di quanto in passato il tempo di attivazione è relativo al l'intervallo di ripetizione.
Mi piacerebbe che quell'utente non ricevesse una notifica questo giorno, solo il giorno successivo e così via.
2: Mi preoccupo che le mie notifiche non vengano visualizzate dopo che l'utente ha spento il telefono. Da AlarmManager documentazione:
allarmi registrati vengono mantenuti mentre il dispositivo è addormentato (e può opzionalmente svegliare il dispositivo su se se ne vanno in quel periodo), ma verrà cancellata se viene spento e riavviato.
Non so se è possibile farlo funzionare tutto il tempo.
Se avete qualche idea su come migliorarlo, siete i benvenuti.
questo è un buon suggerimento, io uso anche questo – slinden77
Grazie mille! Ho una domanda, sei sicuro che: twopm.set (GregorianCalendar.HOUR, 2) sta impostando l'ora PM, non AM? Forse dovrei usare twoPm.set (GregorianCalendar.HOUR_OF_DAY, 14)? –
sì, hai ragione – AntonS