Autore Topic: Eseguire operazione a intervalli regolari (minimo ogni giorno)  (Letto 2434 volte)

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 260
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    SII
  • Sistema operativo:
    Kubuntu
Eseguire operazione a intervalli regolari (minimo ogni giorno)
« il: 10 Agosto 2012, 09:21:53 CEST »
0
Ciao a tutti,
come da titolo non ho esperienza del modo con cui e' possibile eseguire operazioni a intervalli regolari, e per la precisione mi servirebbe eseguire delle operazioni ogni giorno.
Come potrei fare?
Dovrei usare un qualche servizio oppure ho sbagliato sezione?

Grazie in anticipo a chi mi aiutera' :)

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Eseguire operazione a intervalli regolari (minimo ogni giorno)
« Risposta #1 il: 10 Agosto 2012, 09:25:32 CEST »
+1
Io userei AlarmManager, è la cosa più semplice e compatta. Quando scatta, esegui le tue operazioni e reimposti il prossimo. Ovviamente devi intercettare anche il BOOT_COMPLETED per impostare il primo AlarmManager ogni volta che il telefono viene acceso.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 260
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    SII
  • Sistema operativo:
    Kubuntu
Re:Eseguire operazione a intervalli regolari (minimo ogni giorno)
« Risposta #2 il: 10 Agosto 2012, 10:11:46 CEST »
0
Vorrei capire se ho capito bene:
- nel broadcastreceiver imposto le operazioni che voglio fare
- nella classe in cui imposto lo spinner metto:
Codice: [Seleziona]
Intent intent = new Intent(this, TimeAlarm.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), (5 * 1000), pendingIntent);
Va fatto cosi'?

EDIT: purtroppo credo di aver fatto un po' di confusione...sta di fatto che non riesco piu' a cavarne piede.
Quel che vorrei e' eseguire un'operazione ogni giorno, ogni due giorni, ogni cinque giorni, a seconda della scelta dell'utente.
AlarmManager riesco ad avviarlo ma non a fermarlo. Se poi riavvio il telefono, non prosegue da dove si era fermato, ma riavvia tutto...dico bene?
Come potrei fare?
« Ultima modifica: 10 Agosto 2012, 12:02:29 CEST da Melanogaster »

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 260
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    SII
  • Sistema operativo:
    Kubuntu
R: Eseguire operazione a intervalli regolari (minimo ogni giorno)
« Risposta #3 il: 12 Agosto 2012, 08:50:03 CEST »
0
Nessun'altro?

Inviato dal mio GT-I9100 con Tapatalk 2

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Eseguire operazione a intervalli regolari (minimo ogni giorno)
« Risposta #4 il: 12 Agosto 2012, 11:35:33 CEST »
+1
EDIT: purtroppo credo di aver fatto un po' di confusione...sta di fatto che non riesco piu' a cavarne piede.
Quel che vorrei e' eseguire un'operazione ogni giorno, ogni due giorni, ogni cinque giorni, a seconda della scelta dell'utente.
AlarmManager riesco ad avviarlo ma non a fermarlo.

Io ti consiglio di non impostare l'AlarmManager ripetitivo, ma di impostarlo a singola esecuzione. Poi quando scade, fai quello che devi fare ed eventualmente imposti il successivo. In questo modo puoi decidere se impostare la successiva scadenza oppure fermare tutto.

Se poi riavvio il telefono, non prosegue da dove si era fermato, ma riavvia tutto...dico bene?
Come potrei fare?

Come avevo accennato prima, intercetti l'intent BOOT_COMPLETED e reimposti il primo AlarmManager.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 260
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    SII
  • Sistema operativo:
    Kubuntu
R: Eseguire operazione a intervalli regolari (minimo ogni giorno)
« Risposta #5 il: 12 Agosto 2012, 15:44:46 CEST »
0
Grazie, appena possibile proverò come hai suggerito...;) e sempre da computer ti ringrazierò col tasto apposito!

Inviato dal mio GT-I9100 con Tapatalk 2

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 260
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    SII
  • Sistema operativo:
    Kubuntu
Re:Eseguire operazione a intervalli regolari (minimo ogni giorno)
« Risposta #6 il: 22 Agosto 2012, 23:28:23 CEST »
0
Ci dev'essere qualcosa che sbaglio, perche' la riga
Codice: [Seleziona]
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))mi restituisce
Codice: [Seleziona]
Unable to start receiver it.pkg.Br_Backup: java.lang.NullPointerException

Questo e' il Broadcast receiver e' un semplice broadcast receiver in cui rinnovo il timer...
Che sia problema di manifest? Ho provato varie varianti ma nulla e' cambiato nell'errore
« Ultima modifica: 25 Agosto 2012, 11:00:28 CEST da Melanogaster »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Eseguire operazione a intervalli regolari (minimo ogni giorno)
« Risposta #7 il: 23 Agosto 2012, 10:00:05 CEST »
0
1) Posta un po' più di Logcat, magari includendo la riga di codice che ha generato l'eccezione.

2) Non dare mai per scontato che i parametri che ricevi dal BoradcastIntent non siano NULL, validali sempre.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 260
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    SII
  • Sistema operativo:
    Kubuntu
Re:Eseguire operazione a intervalli regolari (minimo ogni giorno)
« Risposta #8 il: 25 Agosto 2012, 11:00:17 CEST »
0
1) Posta un po' più di Logcat, magari includendo la riga di codice che ha generato l'eccezione.

Codice: [Seleziona]
E/AndroidRuntime(  398): FATAL EXCEPTION: main
E/AndroidRuntime(  398): java.lang.RuntimeException: Unable to start receiver it.pkg.Br_Backup: java.lang.NullPointerException
E/AndroidRuntime(  398):        at android.app.ActivityThread.handleReceiver(ActivityThread.java:1780)
E/AndroidRuntime(  398):        at android.app.ActivityThread.access$2400(ActivityThread.java:117)
E/AndroidRuntime(  398):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:978)
E/AndroidRuntime(  398):        at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(  398):        at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(  398):        at android.app.ActivityThread.main(ActivityThread.java:3647)
E/AndroidRuntime(  398):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(  398):        at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime(  398):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
E/AndroidRuntime(  398):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
E/AndroidRuntime(  398):        at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(  398): Caused by: java.lang.NullPointerException
E/AndroidRuntime(  398):        at it.pkg.Br_Backup.onReceive(Br_Backup.java:28)
E/AndroidRuntime(  398):        at android.app.ActivityThread.handleReceiver(ActivityThread.java:1769)
E/AndroidRuntime(  398):        ... 10 more

La riga di codice in oggetto e' questa:
Codice: [Seleziona]
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))
E' solo un problema dovuto al fatto che e' davvero null o sbaglio qualcosa?
In teoria dovrebbe crashare anche all'avvio dell'emulatore, perche' dovrebbe reimpostare il timer, cosa che invece non fa (non crasha)...Ma non crasha perche' non viene eseguito all'avvio o per quale motivo?

Questo il manifest:
Codice: [Seleziona]
                <receiver android:name=".Br_Backup" android-permission="android.permission.RECEIVE_BOOT_COMPLETED">
                    <intent-filter>
                        <action android:name="android.intent.action.BOOT_COMPLETED"></action>
                    </intent-filter>
                </receiver>
« Ultima modifica: 25 Agosto 2012, 11:03:20 CEST da Melanogaster »

Offline auron86

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +1
    • Mostra profilo
Re:Eseguire operazione a intervalli regolari (minimo ogni giorno)
« Risposta #9 il: 31 Agosto 2012, 12:52:00 CEST »
0
ciao volevo sapere se avevi risolto e in caso come, mi trovo nel tuo stesso caso il servizio non viene avviato al boot

thx =)

Offline Melanogaster

  • Utente normale
  • ***
  • Post: 260
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    SII
  • Sistema operativo:
    Kubuntu
Re:Eseguire operazione a intervalli regolari (minimo ogni giorno)
« Risposta #10 il: 31 Agosto 2012, 16:42:45 CEST »
0
Purtroppo nemmeno io son riuscito a risolvere!
Mi son solo limitato a verificare che getAction() fosse diverso da null...