Nepomuk Karbacher


n3po - Personen/Partnersuche via Bluetooth

n3po bringt die Partnerbörsen aus dem Internet ins reale Leben.


n3po - Partner / Personensuche via Bluetooth [link 01]

n3po - Partner / Personensuche via Bluetooth

Technik

  • › PDF aus Powerpoint-Präsentation, Funktionsweise der Software [PDF | 9 MB ] [link 02]
  • › Ablauf der Applikation [JPEG | 406 KB ] [link 03]
  • › Zusammenspiel der Bluetooth-Schicht [248 KB ] [link 04]
  • › Schichtenmodell der Applikation [48 KB ] [link 05]
  • › Teilübersicht der Packages [10 KB ] [link 06]
  • › Server-Clientkommunikation [189 KB ] [link 07]

Technische Beschreibung

Die Applikation wurde in Java (Java 2 Micro Edition, J2ME) geschrieben. Vorraussetzung sind ein MIDP 2.0 fähiges Mobiltelefon mit Bluetooth und den entsprechenden APIs zur verarbeitung von Multimediadaten (Sprache, Fotos, MIDI-Dateien) und zum Steueren der Bluetooth-Schicht.

--------------------Auszug aus der Diplomarbeit-----------------

Architektur der Applikation

Die Klassen der Applikation verteilen sich über die Packages n3po.core, n3po.conf und n3po.net, die Klassen für die Benutzeroberflächen sind in den Packages n3po.core.gui und n3po.conf.gui zu finden.

Die Applikation ist, angelehnt an das Model-View-Controller-Pattern ( MVC ), in drei Schichten aufgeteilt:

Die Benutzeroberfläche für die Ein- und Ausgabe von Informationen durch und an den Benutzer. Die Steuerungsschicht, die auf die Eingaben des Benutzers reagiert und die jeweilig daraus folgenden Aktivitäten der Netzwerkschicht anstößt bzw. Rückmeldungen an den Benutzer weitergibt. Die Netzwerkschicht ist für die Kommunikation über Bluetooth und Wireless Messages (SMS) zuständig. Alle drei Schichten greifen auf die Konfigurationsdaten des Programms zu, welche durch die Klassen im Package n3po.conf repräsentiert werden.

Das folgende Diagramm veranschaulicht das Zusammenspiel der verschiedenen Schichten.

Die Klasse für die Darstellung des Voice-Chats und der Aufnahme von Audiodaten ist ebenfalls von Canvas abgeleitet. Um eine Push-To-Talk ähnliche Benutzung zu ermöglichen wird hier auf die LowLevel – UI zurückgegriffen, dadurch ist es möglich Events wie das Drücken einer Taste sowie den Zeitpunkt, wenn sie wieder losgelassen wird, abzufragen. Die Aufzeichnung der Audiodatei beginnt dabei mit dem Drücken einer festgelegten Taste, solange die Taste gedrückt bleibt, werden die Audiodaten aufgenommen. Lässt der Benutzer die Taste los, wird die Aufzeichnung gestoppt und die daraus resultierenden Daten an den Kommunikationspartner übertragen.

Im Paket n3po.conf.gui befinden sich die Klassen für die Konfiguration des Programms und die Einstellung des persönlichen Profils bzw. des gewünschten Partnerprofils. Die Eingabe der Kennwörter für den zweiten Suchmodus findet über eine weitere Form-Klasse statt, welche nur anwählbar ist, wenn der Kennwort-Modus aktiviert wurde.

Für die Eingabe der Grundangaben wie Name, Infotext und Foto ist die Klasse F_Identity vorgesehen, der Zugriff auf die Interne Kamera des Mobiltelefons mit Hilfe der MMAPI findet in der Klasse F_Identity_Photo statt.

Falls ein Endgerät nicht über eine interne Kamera verfügt oder die Aufnahme von Fotos mittels der J2ME nicht unterstützt, lässt sich über die Klasse F_Filebrowser ein Foto vom Dateisystem bzw. der Speicherkarte des Handys auswählen und laden.

Die Systemeinstellungen wie Vibrationsalarm, Klingelton, Bewegungsmodus können mit der Form F_SystemConfig gesetzt werden, die Laufzeit des Abonnements kann über die Klassen F_Abo und F_Abo_SMS angezeigt und verlängert werden.

Zusätzlich ist die Klasse F_Debug für Test- und Debugzwecke vorhanden, über diese Form kann der Debug-Modus aktiviert und deaktiviert, das Löschen des Recordstores und der Blacklist angestoßen werden, oder die Bildschirmauflösung abgefragt werden.

Die Anzeige des Konfigurations-Hauptmenues und die Auswahl der einzelnen Kategorien wird durch die Klasse F_Conf implementiert.

Steuerungsschicht:
Die Methoden zur Steuerung der Programmlogik finden sich im Package n3po.core in der Klasse CoreMidlet, welche die Interfaces für die Behandlung von Bluetooth – und SMS-Events, implementiert. Über die in den Interfaces definierten Callback- Methoden wird auf eingehende Nachrichten und Ereignisse über die Bluetooth- oder Wireless-Messaging-Schnitstelle reagiert und die entsprechenden Reaktionen darauf angestoßen.

CoreMidlet ist von MIDlet abgeleitet und implementiert die Grundfunktionen zum starten, beenden und pausieren der gesamten Applikation. Das CoreMidlet vermittelt zwischen den Eingaben des Benutzers über die GUI-Klassen und der Netzwerkschicht. Es enthält die Methoden zum Verschicken von unterschiedlichen Nachrichtentypen über die Netzwerkschnittstellen, ebenso finden sich im CoreMidlet Methoden zum Pausieren sowie Deaktivieren und Reaktivieren der Netzwerkaktivität, welche dann die entsprechenden Methoden im Netzwerklayer aufrufen.

Die Klasse MMUtil enthält Hilfsmethoden zur Verarbeitung von Multimediadaten. Dabei werden Funktionen zur Anpassung der Fotos an die unterschiedlichen Displayauflösungen der Endgeräte, zum Abspielen von MIDI-Dateien als Klingelton sowie zum Aufzeichnen und Abspielen von Audiodaten in gerätespezifischen Formaten zur Verfügung gestellt.

Für die Protokollierung von Debugausgaben ist die Klasse DebugUtil vorgesehen, sie implementiert die Funktionalität zur lesbaren Ausgabe von Bluetooth-ServiceRecords, Geräte-IDs und UUIDs sowie zur Protokollierung in ein File.

Im n3po.conf – Package finden sich die Klassen mit den Einstellungen für das persönliche Profil (MyProfile), das Partner-Profil (PartnerProfile) und die Systemeinstellungen (SysConf). Die Funktionalität zum Laden der Einstellungs-Attribute aus dem RecordStore des Endgeräts, sowie das persistente Speichern von Daten im RecordStore findet sich in diesen Klassen.

Methoden zum Erzeugen eines Profil-Strings für den Versand, zum Vergleichen von zwei Profilen und für die textuelle Auswertung eines Profil-Strings sind ebenfalls in diesen Klassen zu finden.

Zum Testen der SMS-Abonnement Funktion unter realen Bedingungen findet sich ein zweites MIDlet im n3po.core – Package, welches auf eine eingehende SMS wartet, diese nach dem Eingang anzeigt und eine gültige Bestätigungs-SMS zurückschickt. So kann die Abonnementfunktion mit zwei Mobiltelefonen getestet werden, normalerweise übernimmt diese Funktion ein SMS-Gateway eines Service-Providers , der auf sogenannte Premium-SMS spezialisiert ist.

Die Klassen der Benutzerschnittstelle und der Steuerungsschicht sind als Singletons implementiert, da von jeder Klasse maximal eine Instanz benötigt wird. Über die Methode getInstance() wird die aktuelle Instanz zurückgegeben oder, falls noch nicht vorhanden, ein neues Objekt instantiiert und zurückgegeben. Somit wird kein Speicherplatz verschwendet und das jeweilige Objekt kann global angesprochen werden. Falls bei einer späteren Weiterentwicklung des Programms mehrere Objekte benötigt werden, ist diese Änderung leicht möglich.

Für die Ausgabe von Fehlermeldungen oder Debug – Informationen besitzen alle wichtigen Klassen eine Methode zum Protokollieren des Programmstatus welcher ein String mit dem Ausgabetext übergeben wird. Die log() – Methode leitet alle Ausgaben an die Methode gui_log() der Klasse CoreMidlet weiter und fügt den jeweiligen Klassennamen als Source hinzu.

Benutzeroberfläche:
Die Klassen für die Benutzeroberfläche bauen bis auf zwei Ausnahmen auf den Form-Klassen der High-Level-UI auf, da die Anforderungen des Programms an die GUI gut mit den vorgefertigten Items abgedeckt werden können.

Die von Form abgeleiteten Klassen im Paket n3po.core.gui sind für die Anzeige des Hauptmenüs und des Status-Bildschirms während der Suche nach anderen Geräten zuständig. Auch die Klassen für die Anzeige der Partnerdaten nach einer erfogreichen Verbindung, sowie für die grafische Darstellung des Text – und Voice-Chat und der Profilanzeige befinden sich in diesem Package.

Für die Darstellung von Debugausgaben auf dem Handydisplay dient eine von Canvas abgeleitete Klasse, welche zur LowLevel-UI gehört. Die Ausgabe ist horizontal und vertikal scrollbar und erleichtert somit die Lesbarkeit der Protokolle auf dem Handy-Display wenn der Debug-Modus aktiviert wurde. Um möglichst viel Platz für die Ausgabe von Debugdaten verwenden zu können wurde hier eine Canvas verwendet, welche eine exakte Positionierung der Ausgabe erlaubt.

Netzwerkschicht:
Das Package n3po.net enthält die Klassen, welche für die Netzwerkfunktionalität und Kommunikation über Bluetooth übernehmen. Ebenso sind die Klassen für die Kommunikation über SMS in diesem Package enthalten.

Die Klasse BluetoothLayer bildet den Kern der für die Bluetooth-Kommunikation zuständigen Klassen. Sie implementiert Methoden zum Erzeugen eines Server-Threads, der auf eingehende Bluetooth-Verbindungen wartet und einen eigenen Bluetooth-Service auf dem Endgerät registriert.

Nachrichten werden mittels einer SIGNAL – Nummer in verschiedene Typen aufgeteilt, die Klasse BluetoothLayer legt einige SIGNAL-Typen fest, z.B. SIGNAL_DATA für Binärdaten, SIGNAL_MESSAGE für Textnachrichten oder SIGNAL_PACKET für das Informationspaket aus Name, Infotext und Foto. Anhand des SIGNAL kann der Inhalt eines Datenpakets identifiziert und dann entsprechend behandelt werden.

Die Methode query() stößt die nebenläufige Suche nach anderen Bluetooth-Geräten in der Umgebung (Device Discovery) in den über das Bewegungsmuster voreingestellten Intervallen an. BluetoothLayer verwaltet bereits bekannte und abgefragte Geräte sowie Geräte mit denen keine Kommunikation mehr erwünscht ist, um Mehrfachverbindungen zu vermeiden. Die Liste mit den unerwünschten Kommunikationspartnern wird über die Konfigurationsklassen persistent gespeichert.

Die innere Klasse Listener implementiert das DiscoveryListener - Interface welches über Callback-Methoden auf Ereignisse wie gefundene Geräte und den Abschluss der Gerätesuche reagiert. Ebenso enthält es die Callback-Methoden für die Reaktion auf gefundene Services auf anderen Geräten und den Abschluss der Service-Suche.

Die interne Klasse DoServiceDiscovery implementiert die Funktionalität für die Suche nach Services auf gefundenen Endgeräten.

Eine aktive Verbindung zu einem anderen Gerät repräsentiert die Klasse Endpoint, sie besitzt jeweils einen Sender- und einen Reader-Thread, welche für die Datenübertragung zwischen den Mobiltelefonen über Input- bzw. Outputstreams zuständig sind. Endpoint verwaltet eine Nachrichten-Queue mit den anstehenden Nachrichten und informiert die Steuerungsschicht durch das BTListener - Interface über aufgetretene Netzwerkevents wie eingehende oder verschickte Nachrichten sowie den Verbindungsaufbau und -abbruch.

Nachrichten sind Instanzen der Klasse DataPacket, die Klasse verfügt über mehrere, überladene Konstruktoren für unterschiedliche Pakettypen wie z.B. das Infopaket, das aus mehreren unterschiedlichen Informationen bestheht, reine Textnachrichten oder Binärdaten.

Für die Kommunikation über Kurznachrichten stehen die Klassen SMSSender und SMSReceiver zur Verfügung, welche jeweils einen Sender bzw. Reader-Thread erzeugen und auf eingehende Nachrichten auf einem definierten Port warten oder Nachrichten verschicken. Durch das Interface SMSListener wird die Steuerungsschicht über Events von der Wireless-Messaging-Schnittstelle benachrichtigt.

Hardware / Software

zum Beispiel Siemens S65 oder alle anderen Javafähigen Mobiltelefone die obenstehende Voraussetzungen erfüllen.

Kontext

Hochschule / Fachbereich

Fachhochschule Augsburg
Fachbereich Informatik (Multimedia)

URL der Hochschule

» http://www.fh-augsburg.de [link 08]

Betreuer des Projekts

Prof, Dr.  Gerhard Meixner

Kommentar des Betreuers

Das Projekt fußt auf einer originellen Idee, wurde auf Basis eines ambitionierten Realisierungsplans gestartet, mit erheblichem Einsatz und Zielstrebigkeit bei der Implementierung umgesetzt und damit abgeschlossen, Einsatzszenarien für den funktionsfähigen Prototypen anzudenken und aufzuzeigen.

Die Idee reflektiert eine neue Form der Kommunikationsanknüpfung zwischen Menschen, die zu Fuß im öffentlichen Raum unterwegs sind. Der spezielle Kommunikationswunsch wird in Form personifizierter Präferenzen des Kommunikationssuchenden konfiguriert und automatisiert durch das mitgeführte Mobiltelefon an potentielle, im Alltagsverkehr kreuzende, Adressaten weitergeleitet, die auf ihrem Mobiltelefon ebenfalls die Software mitführen und durch deren Aktivierung Kommunikationsbereitschaft signalisieren. Zum geeigneten Zeitpunkt klinken sich die adressierten Personen real in die Kommunikation mit ein.

Das Bestechende an der Arbeit ist, dass die Tragfähigkeit dieser Idee unter Zuhilfenahme der neuesten Technologien (J2ME mit MIDP 2.0, Bluetooth) in Form eines Prototypen verifiziert werden konnte, obgleich bezüglich der zum Entstehungszeitpunkt noch sehr neuen Bluetooth-Technologie in der erschwerten Situation - bewegte Sender/Empfänger - einige prinzipielle Probleme und Kinderkrankheiten bei den Implementierungen auf den Mobiltelefonen gelöst werden mussten.

Seminar / Kurzbeschreibung

Das Projekt wurde im Rahmen einer Diplomarbeit des Studienganges Multimedia an der FH-Augsburg entwickelt, ist also eine Einzelleistung. Der Einstieg in die Thematik erfolgte durch entsprechende Vorlesungen und eine Projektarbeit aus dem Schwerpunkt "mobile experience" (s. u.).

Zuordnung Forschungsbereich

Der Themenschwerpunkt "mobile experience" beschäftigt sich langfristig mit Möglichkeiten und Konsequenzen mobiler multimedialer Kommunikation mittels handheld Geräten und Netzwerken.

Dabei stehen sowohl technische wie gestalterische Aspekte im Mittelpunkt unseres Interesses. Im Rahmen von Gruppenprojekten und Diplomarbeiten werden modular verzahnt folgende Komplexe behandelt:

- mobile Geräte + GPS
- ortsbezogene Dienste
- mobile Geräte + wireless Broad Band
- ortsbezogene Unterhaltung (Games, Kultur)
- vernetzte mobile Clients + Datenbanken
- Mensch-Maschine-Schnittstelle
- Anwendungskonzepte

  • › digital sparks 2006 [link 09]
  • › PDF aus Powerpoint-Präsentation, Funktionsweise der Software [PDF | 9 MB ] [link 10]
  • › Kurzes Demonstrationsvideo, Ablauf der Applikation auf Siemens S65, 320x240 [11 MB ] [link 11]
  • › Ablauf der Applikation [JPEG | 406 KB ] [link 12]
  • › Zusammenspiel der Bluetooth-Schicht [248 KB ] [link 13]
  • › Schichtenmodell der Applikation [48 KB ] [link 14]
  • › Teilübersicht der Packages [10 KB ] [link 15]
  • › Server-Clientkommunikation [189 KB ] [link 16]