Daten via Bluetooth senden

S

Schütz12

Neues Mitglied
0
Hallo leute,

Ich verzweifle schon richtig bei meiner APP :(

Ich versuche über Bluetooth Daten zu verschicken.

Dabei verwende ich einen eigenen Thread, weiß nur nicht ob ich den richtig verwende :huh:

Hier mein Code:

Code:
private class ConnectedThread extends Thread {
                private final BluetoothSocket mmSocket;
                private final InputStream mmInStream;
                private final OutputStream mmOutStream;

                public ConnectedThread(BluetoothSocket socket) {
                    mmSocket = socket;
                    InputStream tmpIn = null;
                    OutputStream tmpOut = null;

                    // Get the input and output streams, using temp objects because
                    // member streams are final
                    try {
                        tmpIn = socket.getInputStream();
                        tmpOut = socket.getOutputStream();
                    } catch (IOException e) {
                    }

                    mmInStream = tmpIn;
                    mmOutStream = tmpOut;

                    Runnable d = new Runnable() {
                        @Override
                        public void run() {
                            byte[] buffer = new byte[1024];  // buffer store for the stream
                            int bytes; // bytes returned from read()

                            // Keep listening to the InputStream until an exception occurs
                            while (true) {
                                try {
                                    // Read from the InputStream
                                    bytes = mmInStream.read(buffer);
                                    // Send the obtained bytes to the UI activity
                                    bluetoothIn.obtainMessage(handlerState, bytes, -1, buffer).sendToTarget();
                                } catch (IOException e) {
                                    break;
                                }
                            }
                        }
                    };
                    Thread data = new Thread(d);
                    data.start();
                }
                public void sendText(String text){
                  byte[] toSend;

                    toSend=text.getBytes();
                    write(toSend);
                }

                /* Call this from the main activity to send data to the remote device */
                public void write(byte[] bytes) {
                    try {
                        mmOutStream.write(bytes);
                    } catch (IOException e) { }
                }

                /* Call this from the main activity to shutdown the connection */
                public void cancel() {
                    try {
                        mmSocket.close();
                    } catch (IOException e) { }
                }
            }
    }

Dies ist meine Klasse für das senden und empfangen von Daten. Könnte jemand mal drübersehen und sagen was ich falsch mache?

Danke vielmals.
 
Was funktioniert denn nicht? Bekommst du Fehlermeldungen (exceptions) oder kommen die Daten einfach nicht an? Du hast mehrere leere catch Blöcke, es könnte sein das exceptions abgefangen werden ohne das du es merkst. Schreib dir wenigstens log Nachrichten oder ein printStackTrace damit du siehst ob exceptions gefangen werden
 
Das verschicken und empfangen funktioniert jetzt schon, leider fehlt immer das 1 zeichen. Weißt du zufällig von wo das kommen könnte?

Hier noch einmal der neue Code:

public void beginListenForData() {
try {
inStream = mmSocket.getInputStream();
} catch (IOException e) {
}

Thread workerThread = new Thread(new Runnable()
{
public void run()
{
while(true)
{
try
{
byte[] buffer = new byte[256];
int bytesAvailable=inStream.read(buffer);
final String readMessage = new String(buffer, 0, bytesAvailable);
//handler.post(new Runnable()
//{
//public void run()
//{
//
bluetoothIn.obtainMessage(handlerState, bytesAvailable, -1, readMessage).sendToTarget();
// recdata.setText(readMessage);
//}
// });
}
catch (IOException ex)
{
stopWorker = true;
}
}
}
});

workerThread.start();
}
 
Ist jetzt sehr schwer zu lesen das coding, ohne Formatierung und mit dem ganzen auskommentierten Zeilen zwischendrin. Mir fallen gleich mehrere Dinge auf du hast den try catch block innerhalb der while Schleife und setzt dort stopworker auf true. Aber deine while Schleife ist gar nicht von diesem boolean abhängig und läuft deshalb weiter es würden immer mehr exceptions gefangen ohne das die Schleife beendet wird. Ich kann in dem code Ausschnitt auch nicht sehen was für ein Objekt bluetoothin ist. Aber rufst du obtainMessage auf und machst dann nichts mit dem return wert (ich weiß ja wie gesagt nicht was bluetoothin ist, aber ich vermute obtainMessage liefert eine message zurück?). Insgesamt war dein erster Ansatz viel übersichlicher
 
Tut mir leid für den unleserlichen code :(
Dieser code ist nur ein ausschnitt vom kompletten code, hier sollte nur zusehen sein wie die daten verschickt werden.

Habe es gestern noch zum laufen gebracht. Habe nur eine Zeitverzögerung eingebaut damit alle zeichen vom inputstream ausgelesen wird und nicht nur zuerst ein bruchteil damit nacher falsche werte ausgelesen werden.

Code folgt heute noch, wer es braucht!
 

Ähnliche Themen

S
Antworten
4
Aufrufe
4.467
mblaster4711
mblaster4711
Jansenwilson
Antworten
1
Aufrufe
761
swa00
swa00
A
Antworten
10
Aufrufe
1.021
swa00
swa00
Zurück
Oben Unten