Arthur Zaczek Nov 2014
1 Beispiel droidremoteppt 1.1 Beschreibung Powerpoint soll mit ein Android Handy über Bluetooth gesteuert werden Folien wechseln (Vor/Zurück) Folien am Handy darstellen Am Handy Zeichnen, im Powerpoint darstellen 1.2 Aufbau Powerpoint Serverapplikation Öffnet einen Bluetooth Socket Steuert Powerpoint Android App Verbindet sich über Bluetooth zur Server-Applikation Sendet Commandos 1.3 Architektur 1.4 Protokoll 1.5 MessageKind MESSAGE_NEXT = 1 MESSAGE_PREV = 2 MESSAGE_END = 3 MESSAGE_TOGGLE_BLACK_SCREEN = 4 MESSAGE_CLEAR_DRAWING = 5 MESSAGE_SCREEN_SIZE = 6 MESSAGE_SLIDE_CHANGED = 7 MESSAGE_START = 8 MESSAGE_DRAW = 9 1.6 Nachrichten 1.7 PC - Nachrichten Abstrakte Klasse PPTMessage stellt Basisinformationen/Funktionen zur Verfügung MessageDispatcher & BluetoothServer müssen nur PPTMessage kennen SimpleMessage implementiert den Datenaustausch leer, da keine Daten übertragen werden 1.8 PC - PPTMessage public abstract class PPTMessage { public enum MessageKind { 1
Figure 1: MESSAGE_NEXT = 1, MESSAGE_PREV = 2,... public static PPTMessage CreateMessage(MessageKind kind) { switch (kind) { case MessageKind.MESSAGE_NEXT: return new NextMessage(); case MessageKind.MESSAGE_PREV: return new PrevMessage();... default: return null; public abstract void ReadMessage(BigEndianReader sr); public abstract void WriteMessage(BigEndianWriter sw); public abstract MessageKind Kind { get; 1.9 PC - SlideChangedMessage public class SlideChangedMessage : PPTMessage { byte[] bytes = null; public SlideChangedMessage(Image img) { using (var ms = new System.IO.MemoryStream()) { img.save(ms, System.Drawing.Imaging.ImageFormat.Png); bytes = ms.toarray(); 2
public override void ReadMessage(BigEndianReader sr) { // nothing to read public override void WriteMessage(BigEndianWriter sw) { sw.write(bytes.length); sw.write(bytes); public override PPTMessage.MessageKind Kind { get { return MessageKind.MESSAGE_SLIDE_CHANGED; 1.10 PC - MessageDispatcher Bekommt über den Construktor: BluetoothServer PPTControler Registriert sich beim Bluetooth Server für Nachrichtenempfang Beim Empfang einer Nachricht ruft er die entsprechende Aktion im PPT Controller auf => Übersetzung zwischen Nachrichten & PPT Aktionen 1.11 PC - PPTController Aufgeteilt PPTConnection PPTController PPTConnection kümmert sich um die Anbindung an die aktuelle Präsentation 3
PPTController steuert die aktuelle Präsentation 1.12 PC - BluetoothServer Kapselt die Bluetooth Lib InTheHand http://inthehand.com/content/32feet.aspx Kapselt einen Thread für die Bluetooth Kommunikation Empfängt/Sendet Bluetooth Nachrichten Verwaltet den Status (Client verbunden) 1.13 Android - Bluetooth ConnectThread Versucht sich zum Bluetooth Server zu verbinden Erfolg/Misserfolg wird über eine Message gemeldet 4
BluetoothThread Bekommt einen BluetoothSocket Liest den Socket und erzeugt Nachrichten Sendet Nachrichten 1.14 Android - Anmerkungen Android läuft auf einem Handy Handies sind nicht sehr leistungsstark Wenig Speicher Wenig Rechenleistung Android Apps sind JavaApps Erst mit Frojo (2.2) wurde ein JITT geliefert => Man muss beim Programmieren sehr sparsam sein! Objekte kosten Hauptspeicher Virtuelle Methodenaufrufe kosten CPU 1.15 Android - Activity Android Activity: Benutzerinteraktion Hat einen View Kann UI Events verarbeiten Hat einen Lifecycle 1.16 Android MainActivity Listet alle verfügbaren Bluetooth Geräte auf User wählt ein Gerät ConnectThread wird gestartet 5
Bei Verbindung wird die RemoteControl Activity gestartet 1.17 Android RemoteControl Activity Starten den Bluetooth Thread Empfängt von diesem Nachrichten Sendet Nachrichten über den Bluetooth Thread nach Benutzerinteraktion 6