Autore Topic: Comunicazione da IntentService\service a activity  (Letto 1173 volte)

Offline sgotenks

  • Utente junior
  • **
  • Post: 57
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Geeksphone zero
  • Sistema operativo:
    Windows
Comunicazione da IntentService\service a activity
« il: 14 Luglio 2011, 15:53:23 CEST »
0
Sto impazzendo pls avrei bisogno di un po di aiuto, trovo solo tutorial ed esempi troppo complessi e io voglio keep it simple dato che ne so poco dell'argomento.

Sto facendo qualcosa simile a un market android.
Ecco cosa ho gia fatto in breve:
Activity A: mostra la lista delle app (che uno può scaricare installare, aggiornare e rimuovere)

Se clicco su una app nella list view==>

Activity B: Mostra i dettagli della app e a seconda che ce l'abbia gia ho no un tasto che può essere:
      - download and install
      - remove
      - update

Cliccando sul tasto ==>

IntentService C (che poi diventerà un service vero e proprio solo che x ora era più veloce dato che così crea da seun nuovo thread)
che a seconda di come era lo stato del pulsante o scarica da internet l'app e la installa, o la disinstalla, oppure l'aggiorna. Per ognuna di queste cose lancia nella notification bar un apposita notification segnalando osa fa......nel caso del download ad esempio mostra una progress bar, mentre negli altri casi semplicemente scrive che ha fatto.


Ora quello che non so come fare:

Dopo che ho premuto il pulsante nell'Activity B l'intent service si avvia in background e fa quel che deve, mentre Activity B torna all'activity A ovvero alla lista della app. Esattamente come fa il market.

Ipotizziamo che L'intent service stia installando l'app Meteo, fintanto che non ha finito, nella lista questa verrà mostrata come non installata e quindi mostrerà la scritta Free oppure il costo. Quando poi il service ha finito quello che vorrei è semplicemente inviare in qualche modo all'activity A (che non è quella che ha avviato il service) un segnale o un messaggio che dice ho fatto quel che dovevo. L'activity A sa che quando riceve quel tipo di mex deve fare un refresh, così noterà che l'app è sul cell e invece del prezzo mostrerà installed.

Quello che non capisco come fare è come si fa a far comunicare un intentservice o un service con una activity (tra l'altro non quella che lo ha lanciato)............se fosse un'altra activity cn un thread a se , userei un handler o async........ma cn un service come si fa? Ho letto di aidl, ipc, ma è tutto così complesso rispetto alla semplicità di quel che serve a me...............ho letto anche dei broadcast receiver che forse fan più al caso mio ma non ho capito bene come funzionano.....


Quello che vorrei è: il servizo termina e invia un mex con un valore intero o una stringa (es 1 se ha finito di installare qualcosa, 2 se ha disinstallato e 3 se ha installato oppure usare delle stringhe) e l'activity lo rivece lo legge e lancia il metodo x gestire la cosa.......

Io avevo provato a lanciare un intent dal service...........

Intent actionIntent = new Intent(this, DownloadService.class);
         Intent actionIntent = new Intent(this, ActivityA.class);
         actionIntent.putExtra("valore", 1);
         startService(actionIntent);

ma mi da l'errore  android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

E no non è quello che voglio perchè quando dall'activity B torno alla A passo per il metodo resume di A, e quindi la lista di app mostrata era filtrata su un eventuale ricerca fatta dall'utente, o su un a categoria o sul prezzo ecc....se faccio new task suppongo che ricrei l'activity da zero e quindi la lista torni quella iniziale..........

         
   

Grazie come sempre,......





« Ultima modifica: 14 Luglio 2011, 17:12:07 CEST da sgotenks »

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Comunicazione da IntentService\service a activity
« Risposta #1 il: 14 Luglio 2011, 17:44:38 CEST »
0
Inserisci un receiver nell'activity che deve ricevere l'aggiornamento dal service.
Dal service invii il messaggio di notifica che l'activity intercetterà.
Gli esempi in giro sono molto semplici, sia in caso di invio, che di ricezione.

Se hai problemi con i receiver, prova a farmi capire dove hai dei dubbi, così ne parliamo.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline sgotenks

  • Utente junior
  • **
  • Post: 57
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Geeksphone zero
  • Sistema operativo:
    Windows
Re:Comunicazione da IntentService\service a activity
« Risposta #2 il: 20 Luglio 2011, 01:54:10 CEST »
0
Grazie funziona :)