CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: Cuoco92 con ben 16 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: Pierdebeer con ben 156 Thanks ricevuti negli ultimi sette giorni
Utente del mese: Pierdebeer con ben 704 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 8 su 8
Discussione:

Fare un Service o AlarmManager

  1. #1
    Baby Droid
    Registrato dal
    Dec 2012
    Località
    Nord
    Messaggi
    44
    Smartphone
    Galaxy Ace i - GT8530i
    Thanks
    1
    Thanked 3 Times in 3 Posts
    Predefinito

    Fare un Service o AlarmManager

    Mi hanno consigliato, per far rimanere attiva un'app in background, il service o l'alarm manager. Io sono piu' propenso per il primo, l'app ogni 10-15-20 secondi dovrà controllare un file on the net e vorrei sapere, visto ch è tanto che ci provo, come fare un Service appunto.
    Non mi servono link a documentazioni, le ho lette e le comprendo, ma mi servono esempi, semplici, non incasinati
    Solo gente che ci abbia lavorato per favore, so che volete aiutare ma spesso se non si è esperti (=non si ha esperienza) si sbaglia.

    Beh in ogni modo grazie per le risposte
    ________________________
    ricordatevi il tasto thanks!

  2.  
  3. #2
    Moderatore L'avatar di frank17next
    Registrato dal
    Jan 2010
    Località
    Campobasso
    Messaggi
    737
    Smartphone
    GNexus, Galaxy Note, GT 10.1
    Thanks
    16
    Thanked 142 Times in 102 Posts
    Predefinito

    Quote Originariamente inviato da shadowyviper Visualizza il messaggio
    Mi hanno consigliato, per far rimanere attiva un'app in background, il service o l'alarm manager. Io sono piu' propenso per il primo, l'app ogni 10-15-20 secondi dovrà controllare un file on the net e vorrei sapere, visto ch è tanto che ci provo, come fare un Service appunto.
    Non mi servono link a documentazioni, le ho lette e le comprendo, ma mi servono esempi, semplici, non incasinati
    Solo gente che ci abbia lavorato per favore, so che volete aiutare ma spesso se non si è esperti (=non si ha esperienza) si sbaglia.

    Beh in ogni modo grazie per le risposte
    Ciao.
    Per cominciare devi creare una classe che estenda la classe Service, e implementare i metodi obbligatori, ovvero onCreate(), onDestroy(), onStart(Intent intent, int startId) - oltre che onBind() e onUnBind().
    I primi tre metodi sono importanti per una buona implementazione di un alarm manager.
    Il codice contenuto nel metodo onCreate() viene eseguito quando il servizio viene lanciato (di solito da una activity, con il comando startService(...) )
    Quindi normalmente viene utilizzato per inizializzare l'alarm manager.

    Ti faccio un esempio di una classe Service, chiamata ServizioSincronizzazione.class, in cui nel metodo onCreate viene creato un alarm manager che gira ogni 5 min, eseguendo il codice contenuto nel metodo onStart() (ora sono solo msg Toast, ma puoi metterci quel che vuoi):
    codice:
    public class ServizioSincronizzazione extends Service {
    
    	private Intent myIntent;
    	private PendingIntent pendingIntent;
            private AlarmManager alarmManager;
    	private Calendar calendar;
    	
    	public static final long DELAY_INTERVAL_SERVICE = 300; //es. 300 secondi = 5 minuti
    //quando vengo allocato in memoria la prima volta, eseguo queste istruzioni
    @Override
    	public void onCreate() { 
    	   super.onCreate();
    	   
    	   myIntent = new Intent(this, ServizioSincronizzazione.class);
    	   pendingIntent = PendingIntent.getService(this, 0, myIntent, 0);
    	   alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
    	   calendar = Calendar.getInstance();
    	   calendar.setTimeInMillis(System.currentTimeMillis());
    	   calendar.add(Calendar.SECOND, 10);
    	   alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), DELAY_INTERVAL_SERVICE*1000, pendingIntent);
    
    	   Toast.makeText(this, "Servizio in Background: ServizioSincronizzazione.onCreate()", Toast.LENGTH_LONG).show();
    	   
    	}
    	
    	@Override //ogni volta che giro eseguo questo codice
    	public void onStart(Intent intent, int startId){
    	super.onStart(intent, startId);		
    		Toast.makeText(this, "Servizio in Background: ServizioSincronizzazione.onStart()", Toast.LENGTH_LONG).show();
    	}
    	
    	@Override //quando muoio eseguo questo codice 
    	public void onDestroy(){
    	super.onDestroy();
    		Toast.makeText(this, "Servizio in Background: ServizioSincronizzazione.onDestroy()", Toast.LENGTH_LONG).show();
    	
    	}
    	
    	@Override
    	public IBinder onBind(Intent intent) {
    		Toast.makeText(this, "Servizio in Background: ServizioSincronizzazione.onBind()", Toast.LENGTH_LONG).show();
    		return null;
    	}
    	
    	@Override
    	public boolean onUnbind(Intent intent) {	
    		Toast.makeText(this, "Servizio in Background: ServizioSincronizzazione.onUnbind()", Toast.LENGTH_LONG).show();
    		return super.onUnbind(intent);
    	}
    	
    }
    Il servizio va avviato in una main class, quella che preferisci, con il comando:

    codice:
    startService(new Intent(this.getApplicationContext(), ServizioSincronizzazione.class));
    ma la manipolazione del servizio è da manuale.
    Rimango a disp, Ciao!
    Nexus 4 - [JB] 4.2.2 Stock + Root
    Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
    Galaxy Note GT-N7000 - [JB] 4.1.2 Stock Root
    Nexus One [GB] - HyperSense Nova
    ------------------------------------------------------------------------
    https://sites.google.com/site/frank17next/

  4. Il seguente Utente ha ringraziato frank17next per il post:

    theangi (22-01-13)

  5. #3
    Senior Droid L'avatar di theangi
    Registrato dal
    Oct 2011
    Messaggi
    357
    Thanks
    71
    Thanked 40 Times in 34 Posts
    Predefinito

    Grazie per il codice, molto chiaro.

    Aggiungo che far fare qualcosa in background ogni 5/10 secondi = annientare la batteria.

  6. #4
    Moderatore L'avatar di frank17next
    Registrato dal
    Jan 2010
    Località
    Campobasso
    Messaggi
    737
    Smartphone
    GNexus, Galaxy Note, GT 10.1
    Thanks
    16
    Thanked 142 Times in 102 Posts
    Predefinito

    Quote Originariamente inviato da theangi Visualizza il messaggio
    Grazie per il codice, molto chiaro.

    Aggiungo che far fare qualcosa in background ogni 5/10 secondi = annientare la batteria.
    Beh si, l'intervallo a 5 secondi è veramente frequente, equivale ad un running continuo, è inevitabile, soprattutto se le operazioni che svolgi eseguono I/O o utilizzo linea dati.
    Non puoi schedulare almeno ogni 5 minuti?
    Nexus 4 - [JB] 4.2.2 Stock + Root
    Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
    Galaxy Note GT-N7000 - [JB] 4.1.2 Stock Root
    Nexus One [GB] - HyperSense Nova
    ------------------------------------------------------------------------
    https://sites.google.com/site/frank17next/

  7. #5
    Baby Droid
    Registrato dal
    Dec 2012
    Località
    Nord
    Messaggi
    44
    Smartphone
    Galaxy Ace i - GT8530i
    Thanks
    1
    Thanked 3 Times in 3 Posts
    Predefinito

    Scusate per il ritardo... Grazie mille della risposta mooolto esaustiva, appena posso provo... In teoria ogni 5 minuti no... Forse 30 secondi... Li farò presente a chi li vuole. Grazie mille!!!


    Inviato dal mio GT-S5830i usando Androidiani App
    ________________________
    ricordatevi il tasto thanks!

  8. #6
    Baby Droid
    Registrato dal
    Oct 2011
    Messaggi
    38
    Thanks
    4
    Thanked 1 Time in 1 Post
    Predefinito

    ma se il servizio è attivo quando il telefono viene spento, alla riaccensione del cellulare il servizio è ancora attivo?
    grazie

  9. #7
    Moderatore L'avatar di frank17next
    Registrato dal
    Jan 2010
    Località
    Campobasso
    Messaggi
    737
    Smartphone
    GNexus, Galaxy Note, GT 10.1
    Thanks
    16
    Thanked 142 Times in 102 Posts
    Predefinito

    Devi creare un BroadcastReceiver e abilitarlo a ricevere ACTION_BOOT_COMPLETED.
    Devi anche aggiungere nel manifest i permessi dell'app RECEIVE_BOOT_COMPLETED.
    Il service si avvierà al reboot del device in automatico

    Inviato dal mio Galaxy Nexus con Tapatalk 2
    Nexus 4 - [JB] 4.2.2 Stock + Root
    Galaxy Tab 10.1 Slim P7500 - [JB] CyanogenMod 10 4.1.2 Pershoot (Nightly 20121013)
    Galaxy Note GT-N7000 - [JB] 4.1.2 Stock Root
    Nexus One [GB] - HyperSense Nova
    ------------------------------------------------------------------------
    https://sites.google.com/site/frank17next/

  10. #8
    Senior Droid
    Registrato dal
    Mar 2013
    Messaggi
    978
    Thanks
    64
    Thanked 24 Times in 24 Posts
    Predefinito

    Quote Originariamente inviato da frank17next Visualizza il messaggio
    Devi creare un BroadcastReceiver e abilitarlo a ricevere ACTION_BOOT_COMPLETED.
    Devi anche aggiungere nel manifest i permessi dell'app RECEIVE_BOOT_COMPLETED.
    Il service si avvierà al reboot del device in automatico

    Inviato dal mio Galaxy Nexus con Tapatalk 2
    ma per far ripetere ogni lunedi alle 12 come posso fare ?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •