Bluetooth – Versand von Nachrichten


Versand von Nachrichten

BTSender implementiert das Interface Runnable und stellt in der run() – Methode die Funktionalität des Threads zur Verarbeitung von eingehenden Nachrichten zur Verfügung. Nach dem Start des Threads wird zuerst versucht, ein DataOutputStream – Objekt zu erzeugen. In diesen DataOutputStream werden die Daten, welche verschickt werden sollen, geschrieben. Das Objekt wird durch die Methode openDataOutPutStream() des StreamConnection – Objekts, welches dem Endpoint zugeordnet wurde, zurückgegeben.

Solange das done – Flag nicht true ist, wird in einer Schleife über die peekMessage() – Methode des EndPoint – Objekts abgefragt, ob Nachrichten zum Versand warten. Falls keine Nachrichten im Queue sind, wartet der Thread eine Sekunde.

Wenn eine Nachricht zum Verschicken vorhanden ist, wird das DataPacket über die getMessage() – Methode des EndPoints bezogen. Die SIGNAL – Nummer des DataPacket bestimmt die weitere Verarbeitung der Nachricht, sie wird immer als erstes verschickt, damit der Empfänger sofort weiss, um welchen Nachrichtentyp es sich handelt und die Daten entsprechend auslesen kann.

Wenn das DataPacket vom Typ BluetoothLayer.SIGNAL_PACKET ist, werden die einzelnen Attribute des Informationspakets nacheinander in den DataOutputStream geschrieben, zuerst die SIGNAL-Nummer als Interger via writeInt(), danach die Größe des byte[] mit dem Foto, ebenfalls als Integer. Dann folgen Nickname, sowie Informatinstext und Profil bzw. Kennwort als String, sie werden mit writeUTF() in den Stream geschrieben. Um sicherzugehen dass die Informationen verschickt wurden, wird die Methode flush() des Streams aufgerufen.

Um die Binärdaten des byte[] zu verschicken, wird die Methdoe write() verwendet, der das byte[] als ganzes übergeben wird. Alternativ können einzelne Bytes über die writeByte() – Methode geschrieben werden. Beim Transfer von Binärdaten kam es auf den Endgeräten zu Problemen, diese werden im Kapitel 3.4.2 beschrieben.

Weiterhin wird der Versand von DataPackets mit Binärdaten (SIGNAL_DATA), z. B. vom VoiceChat, sowie einfache Textnachrichten (SIGNAL_MESSAGE) sowie Terminate – Nachrichten (SIGNAL_TERMINATE) unterschieden. Die jeweiligen Attribute des DataPacket werden nacheinander in den Stream geschrieben und mit der flush() – Methode abgeschlossen. Nach dem Versand einer Terminate – Nachricht wird die stop() – Methode aufgerufen, welche das done – Flag auf true setzt, um die while-Schleife des Sender-Threads abzubrechen.

Nachrichten eines anderen Typs, z. B. die ACK – Nachrichten, welche den Empfang bestätigen, werden gleich behandelt, da sie nur aus SIGNAL – Nummer und einem String als Nachrichtentext bestehen.

Falls während der Übertragung eine Exception geworfen wird, z. B. weil die Connection geschlossen wurde und die Geräte die Verbindung zueinander verloren haben, wird der Benutzer durch einen Fehlerton benachrichtigt und die Methode tryRecon() – des Endpoints aufgerufen, um die Verbindung erneut aufzubauen, falls dies möglich ist.



Ähnliche Artikel zu "Bluetooth – Versand von Nachrichten":


Wenn Du noch Fragen zum Thema Bluetooth – Versand von Nachrichten hast, dann schreib einfach einen Kommentar - oder schau dir meine Buchtipps an:

One Response to “Bluetooth – Versand von Nachrichten”

  1. Patrick Eckert Says:

    Hallo Herr Karbacher,

    ich benötige Hilfe bei meiner Technikerarbeit. Ich erfasse Wetterdaten wie Temperatur, Luftdruck usw. mit meiner Hardware und möchte diese per Bluetooth auf mein Handy senden!!

    Können Sie mir helfen?? Ich benötige Code-Beispiele, da ich im Internet leider nichts gescheites finden kann.

    Mit freundlichen Grüßen

    Patrick Eckert

Wie ist DEINE Meinung zum Thema Bluetooth – Versand von Nachrichten?

Schreib sie einfach als Kommentar:




karbacher.org © Bluetooth – Versand von Nachrichten