Autore Topic: Intent e Service  (Letto 1138 volte)

Offline psicomant

  • Utente junior
  • **
  • Post: 95
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    OSX 10.6.5
Intent e Service
« il: 29 Novembre 2010, 15:49:49 CET »
0
Salve a tutti!
Ho la necessita' di passare un parametro ad un servizio che faccio partire tramite un Intent, negli Extra.

Come recupero tale parametro nel servizio? Stavo leggendo su un po di forum e mi hanno solo confuso:
c'e' chi dice di fare override di onStart, chi di creare un BroadcastReceiver...

Che fare?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Intent e Service
« Risposta #1 il: 29 Novembre 2010, 15:57:38 CET »
0
Dipende quando devi passare questo parametro.
Se ti serve passarlo nel momento in cui avvii il servizio puoi gestire il tutto nel metodo onStartCommand. Altrimenti se il passaggio può avvenire mentre il service è in esecuzione non vedo alternative a un BroadcastReceiver.

Offline psicomant

  • Utente junior
  • **
  • Post: 95
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    OSX 10.6.5
Re:Intent e Service
« Risposta #2 il: 29 Novembre 2010, 16:02:18 CET »
0
Si mi serve all'avvio del Service, per discriminare rispetto a due condizioni:
se cond==A, fai una cosa,
se cond==B, fai un'altra.

Quindi posso recuperare i parametri con

Codice (Java): [Seleziona]
Override    
public int onStart(Intent intent, int startId){
    super.onStart(intent, startId);
    int res = intent.getIntExtra(CONDIZIONE, 1);
    return res;
}

????

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Intent e Service
« Risposta #3 il: 29 Novembre 2010, 16:05:26 CET »
0
Il metodo onStart è deprecato. Devi utilizzare onStartCommand
Service | Android Developers, int, int)

Comunque, perchè ritorni il valore?

Offline psicomant

  • Utente junior
  • **
  • Post: 95
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    OSX 10.6.5
Re:Intent e Service
« Risposta #4 il: 29 Novembre 2010, 16:13:39 CET »
0
Il metodo onStart è deprecato. Devi utilizzare onStartCommand
Service | Android Developers, int, int)

Comunque, perchè ritorni il valore?

Quindi faccio cosi:
Codice (Java): [Seleziona]
@Override
public void onStartCommand(Intent intent, int flags, int startId){
       handleCommand(intent);
    // We want this service to continue running until it is explicitly
    // stopped, so return sticky.
    return START_STICKY;
}

void handleCommand(Intent i){
   i.getIntExtra(CONDIZIONE, 1);
   [...]
}

right?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Intent e Service
« Risposta #5 il: 29 Novembre 2010, 16:15:36 CET »
0
Dovrebbe essere corretto. Prova :)

Ricordati che poi devi stoppare manualmente il servizio oppure chiamare al suo interno il metodo stopSelf() ;)

Offline asterix07

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: 0
    • Mostra profilo
Re:Intent e Service
« Risposta #6 il: 10 Dicembre 2010, 18:23:47 CET »
0
Ne approfitto per chiedervi una cosa, per evitare di aprire un topic apposta.
Come si "invoca" un service all'interno di un activity?
Es

Codice (Java): [Seleziona]
public class act extends Activity implements LocationListener {

@Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.stop);

  //Ora da qui voglio far partire il service da me creato


Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Intent e Service
« Risposta #7 il: 10 Dicembre 2010, 18:26:11 CET »
0

Offline asterix07

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: 0
    • Mostra profilo
Re:Intent e Service
« Risposta #8 il: 10 Dicembre 2010, 18:33:32 CET »
0
si ho letto, quello che mi sfugge è come fare a specificare il nome del service da avviare. Mettiamo caso che io ho una classe "prova" che estende Service e voglio farla partire nella classe act (vedi mex precedente).