Autore Topic: Comunicazione bidirezionale tra threads, come fare?  (Letto 277 volte)

Offline darioconcilio

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
Comunicazione bidirezionale tra threads, come fare?
« il: 27 Agosto 2016, 17:55:58 CEST »
0
Ciao a tutti, ho letto vari articoli e libri, ma essendo acerbo del mondo Android, sono qui a scrivere per porvi una domanda (a voi probabilmente banale).

Situazione: Vorrei creare una piccola app per provare la comunicazione via BT tra il mio galaxy note SM-T211 CON 4.4.2, quello che voglio andare ad implementare è un tool che,scelto il dispositivo BT a cui connettermi (un circuito fatto da me con Arduino che legge temperature e accende qualche lucina), interroga il dispositivo BT e mi mostra i dati letti dai sensori, ma posso anche mandare comandi esecutivi, oltre che interrogativi, come "accendi luce" etc.

Ora, seguendo gli articoli ufficiali del Google Developer, ho inizialmente creato il ConnectThread che si collega al dispositivo, e poi apre il socket tramite il classico ConnectedThread (rif. Google Developer).

Il mio dilemma è "come fare a tenere attivo il ConnectedThread al passaggio tra varie Activity? Inoltre devo poter ricevere dal Thread informazioni all'attività corrente, e inviargli comandi.

Allora ho aggiunto un Service lo attivo, nel quale c'é tutta la logica per eseguire l'approccio come da documentazione.
In debug tutto fila liscio, infatti arrivo all'inizializzazione dei 2 socket in/out del ConnectedThread.

Ora arriva il mio dilemma, come faccio a comunicare dall'activity al ConnectedThread e viceversa?

Quindi come utilizzo l'Handler per ricevere le richieste nel ConnectedThread e inviare le risposte al richiedente?
Qual'é l'approccio migliore?

Scusate il discorso un po' prolisso, non ho postato neanche codice, perché sarebbe un copia incolla del codice dimostrativo ufficiale.

Qualcuno può chiarirmi l'arcano?  :'(

Riepilogando: ho un Service che inizializza il ConnectThread, che inizializza il ConnectedThread. Il Service è inizializzato dalla prima Activity.
Quando l'activity esegue il metodo "Inviami info" del service, il service dovrebbe mandare la richiesta al ConnectThread che a sua volta lo manda al ConnectedThread?
Poi?
Quest'ultimo rimanda la risposta risalendo fino all'handler dell'service e poi a quello dell'attività?
Se si, qual'é lo schema logico di tutto questo? Con quali API? Bastano gli Handler per la risposta di ritorno?
« Ultima modifica: 27 Agosto 2016, 18:00:20 CEST da darioconcilio »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Comunicazione bidirezionale tra threads, come fare?
« Risposta #1 il: 30 Agosto 2016, 14:51:58 CEST »
0
A occhio direi che ti serve un Service di tipo bound:

https://developer.android.com/guide/components/bound-services.html

buona lettura :P

Offline wlf

  • Utente normale
  • ***
  • Post: 315
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:Comunicazione bidirezionale tra threads, come fare?
« Risposta #2 il: 30 Agosto 2016, 15:37:07 CEST »
0
Puoi trovare un esempio proprio utilizzando BluetootLEService per scrivere e leggere da un dispositivo BT LE.