Autore Topic: Schedulazione con AlarmManager  (Letto 181 volte)

Offline capitancooker

  • Utente junior
  • **
  • Post: 115
  • Marco
  • Respect: +10
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    macOS High Sierra
Schedulazione con AlarmManager
« il: 04 Dicembre 2017, 11:36:07 CET »
0
Buongiorno,
in una app ho bisogno di avviare un servizio ogni giorno alla stessa ora, ho quindi impostato un alarm che esegue il broadcast intercettato dal relativo BroadcastReceiver.
L'alarm in effetti si avvia e il broadcast viene ricevuto, solo che accade almeno 30/40 minuti dall'ora prestabilita.
Forse non ho capito come impostare la schedulazione quindi vi posto il codice:
Codice (Java): [Seleziona]
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 9);
        calendar.set(Calendar.MINUTE, 0);

        PendingIntent alarmIntent;
        Intent intent = new Intent(context, AlarmReceiver.class);
        alarmIntent = PendingIntent.getBroadcast(context, AlarmReceiver.START_SERVICE, intent, 0);

        AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
       
        if (alarmMgr != null) {
            alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent);

        }

Dove sbaglio?
Grazie,
Marco
Se sbaglio, correggetemi.

Offline iClaude

  • Utente normale
  • ***
  • Post: 299
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10

Offline capitancooker

  • Utente junior
  • **
  • Post: 115
  • Marco
  • Respect: +10
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    macOS High Sierra
Re:Schedulazione con AlarmManager
« Risposta #2 il: 07 Dicembre 2017, 18:28:37 CET »
0
Grazie iClaude ma continuo a non capire.
Sono tonto e nella mia tontitudine ho provato anche Firebase JobDispacher ma senza successo. Mi manca solo evernote e ho completato il giro.
Prima di riperdermi di nuovo, due istruzioni semplici-semplici per avviare un task tutti i giorni alla stessa ora (+ o - con il permesso di doze) e retro-compatibile fino all'SDK 16, dove le posso trovare?
Grazie,
Marco
Se sbaglio, correggetemi.

Offline iClaude

  • Utente normale
  • ***
  • Post: 299
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:Schedulazione con AlarmManager
« Risposta #3 il: 07 Dicembre 2017, 18:36:05 CET »
+1
Grazie iClaude ma continuo a non capire.
Sono tonto e nella mia tontitudine ho provato anche Firebase JobDispacher ma senza successo. Mi manca solo evernote e ho completato il giro.
Prima di riperdermi di nuovo, due istruzioni semplici-semplici per avviare un task tutti i giorni alla stessa ora (+ o - con il permesso di doze) e retro-compatibile fino all'SDK 16, dove le posso trovare?
Grazie,
Marco

Devi utilizzare i metodi di AlarmManager indicati nella tabella dell'articolo che ho linkato (seconda colonna).
Considera che dall'API 19 in poi non esiste più un metodo del tipo setRepeating che ti garantisce una tempistica esatta. Devi utilizzare setExact, o setExactAndAllowWhileIdle, per impostare il primo allarme: quando scatta l'allarme imposti quello successivo e così via.
Considera anche che se il telefono viene riavviato l'AlarmManager viene resettato.

Offline capitancooker

  • Utente junior
  • **
  • Post: 115
  • Marco
  • Respect: +10
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    macOS High Sierra
Re:Schedulazione con AlarmManager
« Risposta #4 il: 07 Dicembre 2017, 18:43:30 CET »
0
Grazie, riproverò nei prossimi giorni.
Ciao,
Marco
Se sbaglio, correggetemi.

Offline capitancooker

  • Utente junior
  • **
  • Post: 115
  • Marco
  • Respect: +10
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    macOS High Sierra
Re:Schedulazione con AlarmManager
« Risposta #5 il: Ieri alle 16:23 »
0
Ho seguito le istruzioni del tuo blog e ho testato l'app in questi giorni ed effettivamente l'avvio del service avviene all'incirca nell'ora stabilita (mediamente 10/20 minuti dopo). Non è quanto avrei voluto ma ho capito che è android che comanda quindi per ora mi accontento.
Ciao e grazie,
Marco
Se sbaglio, correggetemi.

Offline iClaude

  • Utente normale
  • ***
  • Post: 299
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S8
  • Sistema operativo:
    Windows 10
Re:Schedulazione con AlarmManager
« Risposta #6 il: Ieri alle 21:07 »
0
10-20 minuti però mi sembrano tantini. Con che versione di Android?
Io ho un'app che usa questo sistema e va fuori max di 1-2 minuti su Nougat.

Offline capitancooker

  • Utente junior
  • **
  • Post: 115
  • Marco
  • Respect: +10
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    macOS High Sierra
Re:Schedulazione con AlarmManager
« Risposta #7 il: Ieri alle 23:14 »
0
Al momento è in prova su un solo dispositivo con Marshmallow.
Se sbaglio, correggetemi.