Personal Beat
Stand: 02/2013
Lesedauer: ca. 9 Minuten
Inhalt:
Konzept
Implementierte Funktionen
Relationales Datenmodell
Wiedergabeliste
Beispiel Wiedergabeliste
Benötigte Zugriffsrechte
Publikationen
Personal Beat wurde im Rahmen der Vorlesung Pervasive Computing als interdisziplinäres Projekt an der Hochschule Coburg von den Informatikern Christian Schelter und Michael Koch sowie von den Designerinnen Melanie Wittig und Barbara Märzendorfer umgesetzt. Hierbei war das Augenmerk auf einer App gelegen, welche einen Benutzer beim Sport durch Sensoren überwacht und unterstützt. Aus dieser Anforderung ist eine App entstanden, welche den Puls eines Sporttreibenden überwacht und versucht diesen aufgrund der aktuell spielenden Musik aktiv zu beeinflussen.
Abbildung 1: Konzept von Personal Beat
Die App besteht im Wesentlichen aus zwei Hauptkomponenten, dem Activity Program und dem Music Manager. Das Activity Program dient der Datenerfassung und der Interaktion mit dem Benutzer. Wird ein Trainingsprogramm gestartet, so werden kontinuierlich Sensordaten (GPS-Position, Puls und Sauerstoffsättigung) erfasst und in einer Datenbank gespeichert. Das interdisziplinäre Projekt Personal Beat umfasste auch die Gestaltung eines Pulsoximeters am Handgelenk und eines Kopfhörers [Abbildung 1] durch die Designerinnen Melanie Wittig und Barbara Märzendorfer, wobei sich dieser Artikel ausschließlich mit der App Personal Beat befasst, welche durch die Informatiker Christian Schelter und Michael Koch entwickelt wurde. Die erfassten Sensordaten werden an den Music Manager weitergeleitet, dessen Aufgabe es ist, die passende Trainingsmusik zu spielen. Ist der Puls geringer als der optimale Trainingspuls, wird Musik mit einem schnellen Takt gespielt, ist der Puls hingegen zu hoch, wird Musik mit einem langsamen Takt gespielt. Die verfügbaren Lieder werden in einer speziell erweiterten XSPF-Wiedergabeliste bereitgestellt (siehe unten). Der optimale Trainingspuls kann entweder in den Einstellungen manuell angegeben oder durch die App mittels Eingabe des Alters, Gewichts und Körpergröße selbstständig berechnet werden. Zudem kann in den Einstellungen festgelegt werden, ob die aktuellen Positionsdaten aufgezeichnet werden sollen, um die gelaufene Strecke mithilfe der integrierten Kartenansicht zu visualisieren. Während eines Telefonats wird die Musikwiedergabe automatisch pausiert.
Im Folgenden werden vier ausgewählte Funktionen vorgestellt:
Abbildung 2: Programmauswahl
Dem Benutzer stehen drei unterschiedliche Trainingsprogramme [Abbildung 2] zur Verfügung. Die Schwellwerte für langsame und schnelle Musik unterscheiden sich jeweils zwischen den Trainingsprogrammen.
Abbildung 3: Programm: Joggen
Alle Trainingsprogramme sind nach demselben Schema aufgebaut. Die Oberfläche ähnelt einem normalen Musicplayer und zeigt zusätzlich den gemessenen Puls, die Sauerstoffsättigung, die zurückgelegte Entfernung und den Status der Smartphonebatterie an. Welche Musik gespielt wird, kann in einer speziellen Wiedergabeliste festgelegt werden (siehe unten).
Abbildung 4: Historie
Personal Beat speichert automatisch sämtliche Trainingsdaten und zeigt diese dem Benutzer in der Ansicht Historie in chronologischer Reihenfolge. Durch einen Klick auf einen Eintrag werden detaillierte Informationen zu dem ausgewählten Trainingslauf angezeigt.
Abbildung 5: Detailansicht
In der Detailansicht werden die erfassten Daten, wie beispielsweise maximaler, minimaler und durchschnittlicher Puls, des Trainingslaufs angezeigt. Hat der Benutzer in den Einstellungen der GPS-Aufzeichnung zugestimmt, so wird die gelaufene Strecke auf einer Landkarte visualisiert.
Im Folgenden werden die Personal Beat zugrunde liegenden Datenmodelle aufgezeigt und beschrieben.
Abbildung 6: Datenmodell der möglichen Einstellungen
Android stellt für die Speicherung von Anwendungseinstellungen einen eigenen Mechanismus (vgl. Windows Registry) bereit, dessen Einsatz als "guter Stil" nahegelegt wird. Die Verwendung dieser Funktionalität hat für Anwendungsentwickler den Vorteil, dass die komplette Verwaltung, sowie die Visualisierung der Konfigurationsdaten ohne eigenen Programmieraufwand automatisch abgewickelt wird. Aus Benutzersicht ergibt sich der Vorteil, dass die meisten Apps und auch das Betriebssystem diesen Mechanismus einsetzen und somit die Einarbeitung erleichtert wird.
In den Einstellungen werden diverse Werte, wie in [Abbildung 6] dargestellt, gespeichert.
Weitere Informationen zu den Einstellungen:
Android unterstützt zu einem Zeitpunkt nur eine aktive Benutzersitzung, weshalb Messwerte und Konfigurationsparameter automatisch dem Benutzer zugeordnet werden können, der gerade am Smartphone angemeldet ist.
Die Ermittlung des gerade angemeldeten Benutzers erfordert das Privileg GET_ACCOUNTS.
Es ist unwahrscheinlich, dass mehr als ein Benutzer die App verwendet, da ein Smartphone in aller Regel genau einem Benutzer fest zugeordnet ist. Das Datenmodell ist aber in dieser Form auch für mehrere Benutzer ausgelegt, falls sich das Nutzungskonzept von Smartphones in den nächsten Jahren ändern sollte.
Der Benutzername ist eine Pflichtangabe.
Abbildung 7: Datenbankmodell der Personal Beat App
Die Tabelle enthält die Ablaufdaten einer jeden Trainingseinheit des Benutzers, wie beispielsweise Start- und Endzeitpunkt.
Für jede Programmausführung wird eine eindeutige, fortlaufende Identifikationsnummer automatisch erzeugt, welche den PRIMARY-KEY darstellt.
Die Identifikationsnummer des Benutzers ist ein FOREIGN-KEY.
Der Programmname ist eine Pflichtangabe.
Der Endzeitpunkt muss nach dem Startzeitpunkt liegen.
Die Tabelle enthält die aktuellen Sensormesswerte zu einem bestimmten Zeitpunkt während einer Trainingseinheit.
Für jede Sensorabfrage wird eine eindeutige, fortlaufende Identifikationsnummer automatisch erzeugt, welche den PRIMARY-KEY darstellt.
Die Identifikationsnummer des aktuell ausgeführten Programms ist ein FOREIGN-KEY.
Die aktuelle Uhrzeit ist eine Pflichtangabe.
Sensordaten können NULL sein, falls ein gewisser Sensor nicht angesprochen werden kann.
Die App nutzt eine speziell erweiterte XSPF-Wiedergabeliste als Grundlage, welches Lied in welcher Situation gespielt werden soll und wann sich ein flüssiger Übergang zum nächsten Lied anbietet.
Das XSPF-Format wurde deshalb gewählt, weil es von den meisten gängigen Musik Programmen unterstützt wird und beliebig durch programmspezifische Informationen erweitert werden kann. Somit muss der Anwender für Personal Beat keine eigene Wiedergabeliste definieren und pflegen, sondern kann diese auch mit anderen Programmen abspielen.
Element | NS1 | Mul. | Parse | Req.2 | Value Type | Default | Description |
---|---|---|---|---|---|---|---|
playlist | xspf | 1 | all | yes | - | (nothing) | XSPF v1 specification |
title | xspf | 0..1 | all | yes | anyURI | (emptyString) | XSPF v1 specification |
creator | xspf | 0..1 | all | no | anyURI | (emptyString) | XSPF v1 specification |
annotation | xspf | 0..1 | all | no | anyURI | (emptyString) | XSPF v1 specification |
info | xspf | 0..1 | all | no | anyURI | (emptyString) | XSPF v1 specification |
location | xspf | 0..1 | all | no | anyURI | (emptyString) | XSPF v1 specification |
identifier | xspf | 0..1 | all | no | anyURI | (emptyString) | XSPF v1 specification |
image | xspf | 0..1 | all | no | anyURI | (emptyString) | XSPF v1 specification |
date | xspf | 0..1 | all | no | dateTime | (minDate) | XSPF v1 specification |
license | xspf | 0..1 | all | no | anyURI | (emptyString) | XSPF v1 specification |
attribution | xspf | 0..1 | none | no | - | (nothing) | XSPF v1 specification |
link | xspf | 0..* | none | no | - | (nothing) | XSPF v1 specification |
meta | xspf | 0..* | none | no | - | (nothing) | XSPF v1 specification |
extension | xspf | 0..* | none | no | - | (nothing) | XSPF v1 specification |
trackList | xspf | 0..1 | all | yes | - | (emptyList) | XSPF v1 specification |
track | xspf | 0..* | all | yes | - | (nothing) | XSPF v1 specification |
title | xspf | 0..1 | all | no | anyURI | (emptyString) | XSPF v1 specification |
creator | xspf | 0..1 | all | no | anyURI | (emptyString) | XSPF v1 specification |
annotation | xspf | 0..1 | all | no | anyURI | (emptyString) | XSPF v1 specification |
info | xspf | 0..1 | all | no | anyURI | (emptyString) | XSPF v1 specification |
location | xspf | 0..* | first | yes | anyURI | (emptyString) | XSPF v1 specification |
identifier | xspf | 0..* | first | no | anyURI | (emptyString) | XSPF v1 specification |
album | xspf | 0..1 | all | no | anyURI | (emptyString) | XSPF v1 specification |
trackNum | xspf | 0..1 | all | no | non negative Integer | 0 | XSPF v1 specification |
duration | xspf | 0..1 | all | no | non negative Integer | 0 | XSPF v1 specification |
link | xspf | 0..* | none | no | - | (nothing) | XSPF v1 specification |
meta | xspf | 0..* | none | no | - | (nothing) | XSPF v1 specification |
extension | xspf | 0..* | first3 | no | - | (nothing) | XSPF v1 specification |
musicClass | pb | 0..1 | all | no | {FAST, NORMAL, SLOW} | NORMAL | When shall we play the music? |
breakMode | pb | 0..1 | all | no | {EVER, NEVER, BREAK-POINTS} | EVER | When shall we stop the music? |
breakPoints | pb | 0..1 | all | no | - | (emptyList) | When can we stop the music? |
breakPoint | pb | 0..* | all | no | non negative Integer | 0 | Time in milliseconds after start |
XSPF Version 1 Spezifikation: http://xspf.org/xspf-v1.html
1 XSPF: Namespace-URI: http://xspf.org/ns/0/, Prefix: xspf | personal beat, Prefix: pb
2 Für die App Personal Beat wird mindestens jeweils ein Element benötigt, auch wenn durch die Multiplizität kein Element zwingend vorgeschrieben ist.
3 Selektiert nur das erste <extension>-Element
<track> <location>file://imntisdcard/FILENAME.mp3</location> <title>Chinese Girl</title> <creator>FRAMETRAXX</creator> <duration>215776</duration> <extension application="http://xyz.de/pb/v1"> <pbeat:musicClass>NORMAL</pbeat:musicClass> <pbeat:breakMode>BREAKPOINTS</pbeat:breakMode> <pbeat:breakPoints> <pbeat:breakPoint>40000</pbeat:breakPoint> <pbeat:breakPoint>80000</pbeat:breakPoint> </pbeat:breakPoints> </extension> </track>
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_COARSE_LOCATION
android.permission.BLUETOOTH
android.permission.BLUETOOTH_ADMIN
android.permission.GET_ACCOUNTS
android.permission.WRITE_EXTERNAL_STORAGE
[LINK] Videobeitrag vom Coburger Hochschulfernsehen
[LINK] Pressemitteilung der Hochschule Coburg
[PDF] Beitrag in affin - Das Forschungsmagazin der Hochschule Coburg 2013 (Seite 66f)
[LINK] Zeitungsartikel der Neuen Presse
[LINK] Veröffentlichung beim Informationsdienst Wissenschaft
[LINK] Veröffentlichung auf netzathleten.de
[LINK] Veröffentlichung auf crn.de
[LINK] Veröffentlichung auf femicare.de
[LINK] Veröffentlichung auf flat-is-smart.de
[LINK] Veröffentlichung auf "Entdecke Deutschland" (Auswärtiges Amt)
[PDF] Veröffentlichung im Newsletter Nr. 20 / 21.03.2013 der Deutschen Botschaft in Sofia (Deutsch)
[PDF] Veröffentlichung im Newsletter Nr. 20 / 21.03.2013 der Deutschen Botschaft in Sofia (Bulgarisch)