Autore Topic: Stream dati via bluetooth  (Letto 1453 volte)

Offline Cic@s

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG I5500
  • Sistema operativo:
    Ubuntu 10.10
Stream dati via bluetooth
« il: 17 Giugno 2011, 14:55:44 CEST »
0
Codice (Java): [Seleziona]
class ConnectedThread extends Thread {
       
                public final BluetoothSocket mmSocket;
                public final InputStream mmInStream;
                public final OutputStream mmOutStream;
                public int bytes;
       



                public ConnectedThread(BluetoothSocket socket) {
                        Log.d(TAG, "ConnectedThread creato");
                        mmSocket = socket;
                        InputStream tmpIn = null;
                        OutputStream tmpOut = null;



                        // Get the BluetoothSocket input and output streams
                        try {
                                tmpIn = socket.getInputStream();
                                tmpOut = socket.getOutputStream();
                        } catch (IOException e) {
                                Log.e(TAG, "temp sockets not created", e);
                        }

                        mmInStream = tmpIn;
                        mmOutStream = tmpOut;
                       
                       
                       
                }

                public void run() {
                        Log.i(TAG, "INIZIA mConnectedThread");
                        byte[] buffer = new byte[256];
                        int bytes;

                        // Keep listening to the InputStream while connected
                        while (true) {
                       
                                try {
                                        // Read from the InputStream
                                        bytes = mmInStream.read(buffer);
                                        mHandler.obtainMessage(GraphicActivity.MESSAGE_READ, bytes, -1, buffer).sendToTarget();
                                       
                                } catch (IOException e) {
                                        Log.e(TAG, "disconnected", e);
                                        connectionLost();
                                        break;
                                }
                        }                                
                }

Come faccio a passare mHandler ad un'altra Activity e vedere com'è fatto il flusso di dati?
A me inizialmente basterebbe anche mostrarlo in una TextView

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Stream dati via bluetooth
« Risposta #1 il: 17 Giugno 2011, 15:58:28 CEST »
0
Questo è codice strettamente derivato dall'esempio BluetoothChat presente negli esempi ufficiali google e fa già quello che richiedi.

Ogni qualvolta vengono ricevuti dei dati, questo thread ConnectedThread spedisce i dati all'Handler dell'activity di destinazione usando un messaggio.

Questa è la riga che spedisce i dati all'handler col messaggio:
Codice (Java): [Seleziona]
mHandler.obtainMessage(GraphicActivity.MESSAGE_READ, bytes, -1, buffer).sendToTarget();
Se hai una tua activity sostitutiva della GraphicActivity, ci implementi un handler che possa ricevere quei messaggi e te li fai inviare dal ConnectedThread.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Cic@s

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG I5500
  • Sistema operativo:
    Ubuntu 10.10
Re:Stream dati via bluetooth
« Risposta #2 il: 17 Giugno 2011, 16:13:26 CEST »
0
questa riga:
mHandler.obtainMessage(GraphicActivity.MESSAGE_READ, bytes, -1, buffer).sendToTarget();
l'ho modificata io avendo come activity GraphicActivity, ora come faccio in GraphicActivity a ricevere i dati?
come devo implementare in GraphicActivity per poter visualizzare il flusso dati?
grazie

Offline Cic@s

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG I5500
  • Sistema operativo:
    Ubuntu 10.10
Re:Stream dati via bluetooth
« Risposta #3 il: 17 Giugno 2011, 16:30:40 CEST »
0
Il problema è che non so come si fa a ricevere i dati da un Handler.
Credo che il metodo da utilizzare sia getTarget() ma come lo utilizzo.

Una volta che riesco a prendere i dati, li trasformo con toString() e setto una TextView per vedere cosa stampa a video

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Stream dati via bluetooth
« Risposta #4 il: 17 Giugno 2011, 17:18:21 CEST »
0
Non è complesso: tu avrai nella tua activity una callback di nome handleMessage() nella quale dovrai estrarre i dati da un oggetto Message, stop.

Alcuni esempi di "estrazione" dati da messaggi in Handler puoi trovarli qua: [medio] Introduzione ai Thread - Android Developers Italia
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Cic@s

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG I5500
  • Sistema operativo:
    Ubuntu 10.10
Re:Stream dati via bluetooth
« Risposta #5 il: 17 Giugno 2011, 17:46:45 CEST »
0
Il mio problema è che:
Codice (Java): [Seleziona]
public ConnectedThread(BluetoothSocket socket)non riceve come parametro un handler e poi GraphicActivity è collegata all'activity principale tramite un button, non è collegata direttamente al ConnectedThread. Non so proprio come prendere le informazioni.

Nel ConnectedThread ho:
Codice (Java): [Seleziona]
mHandler.obtainMessage(GraphicActivity.MESSAGE_READ, bytes, -1, buffer).sendToTarget();     ora in GraphicActivity cosa vado a scrivere?

mentre in GraphicActivity ho scritto questo ma mi da errore
Codice (Java): [Seleziona]
        String cout = mHandler.obtainMessage(MESSAGE_READ).getTarget().toString();
                out = (EditText) findViewById(R.id.editText1);
                out.setText(cout);
   

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Stream dati via bluetooth
« Risposta #6 il: 17 Giugno 2011, 18:22:24 CEST »
0
Tu hai estratto una classe privata ConnectedThread() interna ad una classe più generale in cui è definito anche mHandler.

Questo è il codice sorgente dell'esempio ufficiale Google da cui è stato derivato il codice che hai postato:
BluetoothChatService.java | Android Developers

Come vedi mHandler è ben definito in fase di inizializzazione della classe al cui interno c'è il Thread (che poi è il terzo thread nella sequenza di connessione Bluetooth).

Purtroppo non so cosa vuoi ottenere di preciso e nemmeno quale sia il codice che hai già scritto. Per esempio non so se hai già realizzato e testato il codice che stabilisce il socket bluetooth. Se ci sei già arrivato, dovrebbe bastarti passare l'handler alla classe che contiene i thread di connessione bluetooth e ricondurti all'esempio sopra riportato.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Cic@s

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG I5500
  • Sistema operativo:
    Ubuntu 10.10
Re:Stream dati via bluetooth
« Risposta #7 il: 17 Giugno 2011, 18:38:45 CEST »
0
Il mio codice è molto simile a quello dell'esempio BluetootChat. Io sono riuscito a connettermi con il mio dispositivo solo che ora trovo difficoltà a visualizzare il flusso di dati che arriva.
Poi come faccio ad estrarre i dati da questo handler
Codice (Java): [Seleziona]
mHandler.obtainMessage(GraphicActivity.MESSAGE_READ, bytes, -1, buffer).sendToTarget();scusami, ma è da poco che ho iniziato con la programmazione ad oggetti e trovo delle difficoltà

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Stream dati via bluetooth
« Risposta #8 il: 17 Giugno 2011, 18:59:08 CEST »
0
Parti dall'esempio BluetoothChat, quello già visualizza il flusso dati per cui puoi capire direttamente da quello come fare. Nell'esempio che ti ho detto di vedere, ci sono alcuni modi di estrarre dati dai messaggi spediti agli handler, per aiutarti ancora di più dovrei scriverti io l'applicazione, ma ciò travalica completamente i fini di questo forum.

Se programmi in Android da poco, sicuramente l'argomento Bluetooth è uno dei meno indicati vista la complessità e l'impossibilità di testarlo su emulatore. Se hai anche poca esperienza col Java, il mio consiglio è di cominciare con cose più semplici.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Cic@s

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SAMSUNG I5500
  • Sistema operativo:
    Ubuntu 10.10
Re:Stream dati via bluetooth
« Risposta #9 il: 17 Giugno 2011, 19:17:55 CEST »
0
cercherò di prendere spunto da bluetooth chat e spero di arrivare ad una conclusione. Devo fare per forza quest'applicazione bluetooth per il tirocinio ;)
grazie mille per l'aiuto