PDA

Visualizza la versione completa : [Android] Task temporarizzato


fermat
25-11-2019, 10:14
ciao!

un cliente avrebbe mi ha chiesto una cosa che non so bene se si possa fare.
in pratica ha tutta una serie di dispositivi, con android 9 e una app che stiamo sviluppando, che ogni sera vengono riportati alla base dai dipendenti.
la sera, verso le 22/23, si devono sincronizzare con un db centrale attraverso delle web api.
ma questa sincrinizzazione dovrebbe essere fatta in automatico dai dispositivi, senza "aiuto" dell'utente.
possibile fare una cosa del genere in android??

Andrea1979
27-11-2019, 02:58
Timer & TimerTask ?

https://developer.android.com/reference/java/util/Timer.html

fermat
29-11-2019, 11:36
Timer & TimerTask ?

https://developer.android.com/reference/java/util/Timer.html


ho fatto un milione di ricerche, mi uscito fuori di tutto a parte questo.
che l'unica cosa che sembra funzionare come mi serve:


public void testWork() {
Calendar date = Calendar.getInstance();
// date.set(Calendar.HOUR, 23);
// date.set(Calendar.MINUTE, 0);
date.set(Calendar.HOUR, 10);
date.set(Calendar.MINUTE, 33);

// long delay = 86400000;
long delay = 60000;

Timer timer = new Timer();
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
Log.i("TASK", "ESEGUITO");
}
};
timer.schedule(timerTask, date.getTime(), delay);
}


grazie mille!!

fermat
16-11-2020, 18:27
ciao!

ritorno sull'argomento.
in quanto ero sicuro che mesi funzionasse correttamente, ma mi sono accorto che invece quando lo schermo spento, e la app inattiva, invece il task non viene eseguito.

in pratica viene eseguito solo quando il device attivo con la app aperta.
possibile invece fare in modo che venga eseguito anche con telefono inattivo??

Andrea1979
16-11-2020, 18:41
Ti ho suggerito male io. Per un task che continui l'esecuzione anche in background credo che serva qualcosa di pi di TimerTask:

https://developer.android.com/guide/background

in particolare AlarmManager:
https://developer.android.com/training/scheduling/alarms

L trovi anche la spiegazione di come settare l'esecuzione anche se l'app va in idle.

fermat
17-11-2020, 10:50
ok grazie, sembra funzionare:


AlarmManager alarmManager = (AlarmManager) getApplicationContext().getSystemService(Context.A LARM_SERVICE);
Intent intent = new Intent(getApplicationContext(), AlarmReceiver.class);
PendingIntent alarmIntent = PendingIntent.getBroadcast(getApplicationContext() , 0, intent, 0);

Calendar date = Calendar.getInstance();
date.setTimeInMillis(System.currentTimeMillis());
date.set(Calendar.HOUR_OF_DAY, 9);
date.set(Calendar.MINUTE, 51);

try {
alarmManager.setInexactRepeating(AlarmManager.RTC_ WAKEUP, date.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAK EUP, SystemClock.elapsedRealtime() + 60 * 1000, alarmIntent);
} catch (NullPointerException ex) {
Log.e("NULLP", ex.getMessage());
}


aggiungendo tutto il resto.
faccio un p di test pi approfonditi!

Loading