CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: 9mm con ben 3 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 8 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 29 Thanks ricevuti nell'ultimo mese

Visualizzazione dei risultati da 1 a 5 su 5
Discussione:

Chiarimento sui Service: qualcuno li utilizza?

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Senior Droid L'avatar di maurilios


    Registrato dal
    Dec 2009
    Messaggi
    328

    Ringraziamenti
    7
    Ringraziato 20 volte in 19 Posts
    Predefinito

    Chiarimento sui Service: qualcuno li utilizza?

    Sto sviluppando un'applicazione che prevede una funzione che deve operare in background anche con applicazione non avviata. In pratica vorrei andare a leggere periodicamente (1 volta ogni ora) un file xml (rss feed) remoto e notificare all'utente l'aggiunta di una nuova news.
    Da quello che ho capito dalla documentazione ufficiale e dai vari forum, il modo migliore per rispondere a questa esigenza è quello di creare un Service all'interno dell'applicazione, è corretto? Se così fosse come potrei fare in modo che questo service venga avviato all'accensione del telefonino?
    Qualcuno suggerisce questa procedura:

    1. Creare una classe che estenda Service ed una classe che estenda BroadcastReceiver.

    2. All'interno del metodo onCreate del Service inserire la parte di codice che esegue la connessione http, parsa il file xml e notifica l'aggiornamento all'utente.

    3. All'interno del metodo onReceive del BroadcastReceiver verificare che la action passata nell'Intent sia di tipo ACTION_BOOT_COMPLETED ed avviare il servizio (che girerebbe quindi indefinitamente).

    4. Dichiarare il service, il broadcast receiver ed una ulteriore permission, nel manifest:
    codice:
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    
    <service android:name="MioServizio"/>
    
    <receiver android:name="MioReceiver">
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED"/>
                </intent-filter>
            </receiver>
    Insomma, per essere più chiari vorrei realizzare una cosa simile alla notifica delle nuove email di GMail (che come noto funziona anche se GMail non è stato avviato). Le vostre impressioni?

  2.  
  3. #2
    Androidiano


    Registrato dal
    May 2009
    Messaggi
    250

    Ringraziamenti
    2
    Ringraziato 30 volte in 23 Posts
    Predefinito

    Così non va, nel metodo OnCreate non devi fare nulla, la funzione che ti interessa è onStart, nella quale dovresti creare un thread (visto che l'operazione può richiedere diverso tempo) e poi chiami stopSelf per terminare il servizio.
    Se vuoi rendere la cosa periodica, potresti utilizzare AlarmManager.

  4. #3
    Senior Droid L'avatar di maurilios


    Registrato dal
    Dec 2009
    Messaggi
    328

    Ringraziamenti
    7
    Ringraziato 20 volte in 19 Posts
    Predefinito

    Quote Originariamente inviato da BitBerzerkir Visualizza il messaggio
    Così non va, nel metodo OnCreate non devi fare nulla, la funzione che ti interessa è onStart, nella quale dovresti creare un thread (visto che l'operazione può richiedere diverso tempo) e poi chiami stopSelf per terminare il servizio.
    Se vuoi rendere la cosa periodica, potresti utilizzare AlarmManager.
    Ciao e grazie per la risposta. Per il thread avevo pensato ad un TimerTask (che implementa una Runnable) a sua volta avviato da un oggetto Timer, in modo da essere lanciato ad intervalli regolari. Quello che però non capisco è come avviare il service in automatico all'avvio del telefono, senza avviare l'applicazione; ho trovato quel metodo che ho descritto ma non ne ho capito il funzionamento e non so se può andar bene.

  5. #4
    Androidiano


    Registrato dal
    May 2009
    Messaggi
    250

    Ringraziamenti
    2
    Ringraziato 30 volte in 23 Posts
    Predefinito

    Non usare Timer, altrimenti il tuo servizio deve (e non è detto) rimanere perennemente in esecuzione. Invece se usi AlarmManager puoi terminare il servizio e poi lo avvierai di nuovo quando ricevi l'Intent attraverso il broadcastreceiver.
    Allo stesso modo, per avviare il servizio al boot basta che implementi un broadcastReceiver che riceva l'Intent di Boot (devi anche avere il permesso nel manifest)

  6. Il seguente Utente ha ringraziato BitBerzerkir per il post:

    maurilios (16-11-10)

  7. #5
    Senior Droid L'avatar di maurilios


    Registrato dal
    Dec 2009
    Messaggi
    328

    Ringraziamenti
    7
    Ringraziato 20 volte in 19 Posts
    Predefinito

    Ti ringrazio, proverò a seguire il tuo consiglio. Ti farò sapere...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy