iLevate

Mayflower iLevate

Annika und ich haben auf dem diesjährigen Barcamp die iPhone Anwendung iLevate entwickelt, mit der man die Höhe eines geworfenen iPhones messen und vergleichen kann. Das Spaß-Projekt hat es immerhin auf den zweiten Platz der umgesetzen Vorschläge geschafft.

Grundsätzlich ging es bei dem Vorhaben auch um das Testen des
Zusammenspiels einer Webapplikation mit dem Mobiltelefon und um die
Frage, inwieweit sich die iPhone Hardware aus einer Webseite heraus
verwenden lässt. Zunächst hat iLevate deshalb auch auf dem Open Source
Framework PhoneGap aufgebaut, welches den Fotoapparat, GPS,
Beschleunigungssensoren, Sounds, Vibration und das Adressbuch in
iPhones, Blackberrys sowie Android Handys gleichermaßen anspricht (Vgl. PhoneGap Roadmap).
Wegen der langen Ladezeit der Anwendung mit PhoneGap, den zu
erwartenden Schwierigkeiten mit Apple beim Einstellen in den App Store
und aufgrund der Tatsache, dass sich die Beschleunigungssensoren in
JavaScript in Echtzeit nur bis 20 Mal pro Sekunde abfragen lassen,
verzichteten wir schlussendlich doch fast gänzlich auf das PhoneGap Framework
und programierten die Anwendung neu als Objective-C/HTML/JavaScript/PHP/MySQL Mischung.

Wie funktioniert iLevate? Der Benutzer startet die Anwendung und sieht zunächst die Rekordlisten mit den höchsten Würfen in seiner Gegend. Der nicht unter Drogen oder Alkoholeinfluss stehende User wirft nun sein in einer Schutzhülle befindliches iPhone auf weichem Untergrund (z.B. Wiese) in die Höhe. Nicht mit voller Kraft versteht sich.

Während sich das iPhone in der Luft befindet, messen die Beschleunigungssensoren im Gerät prinzipiell in keine Richtung irgendeine Beschleunigung. Die Zeit dieses Zustandes wird gestoppt und iPhone Accelererometer Sensors

aus der so gemessenen Flugzeit lässt sich die Höhe errechnen. Weil sich die Sensoren nicht genau in der Mitte des Gerätes befinden, treten Rotationskräfte auf; dafür wurde ein Toleranzbereich von 2 m/s² festgelegt. Dreht sich das iPhone im Flug zu stark, schlägt die Messung zwar weiterhin fehl, ein zu stark rotierendes iPhone lässt sich aber ohnehin schlecht fangen. Wie man aus der Beschleunigungsgrafik für ein flach fallendes iPhone erkennen kann, werden außerdem ab einer Sekunde Flugzeit schon fast 1 m/s² Beschleunigung durch den Luftwiderstand verursacht. Für höhere Würfe wird der Toleranzbereich deshalb in mehreren Schritten großzügig heraufgesetzt. Seine maximale Fallgeschwindigkeit würde das iPhone theoretisch flach nach 15 Sekunden mit 195 km/h erreichen und die Beschleunigungssensoren würden dann wieder 1 g messen – genauso viel wie bei einem ruhig in der Hand liegenden iPhone.

Sobald man mit seiner Wurfhöhe zufrieden ist, drückt man auf den Absenden-Button, um die Daten an dem Server zu senden. Dort erfolgt die Rückwärtsgeokodierung des Standortes, und es werden die Bestwerte für die jeweilige Stadt, Region, Land, Kontinent und der Welt verglichen. Hat man in einer der geographischen Regionen einen neuen Rekord aufgestellt, ertönt eine Fanfare. Die Audio-Datei wird dabei nicht ans iPhone übertragen, sondern liegt bereits in der Applikation und wird von JavaScript aus gestartet.

iLevate wertet die aufgerufene URL aus und extrahiert den Befehlt:

iLevate hat es jedoch bisher nicht in den App Store geschafft, Apple hat die Anwendung zunächst leider abgelehnt:

Thank you for submitting iLevate 0.9 to the App Store. We’ve reviewed
iLevate 0.9 and determined that we cannot post this version of your
iPhone application to the App Store at this time because it encourages
a physical activity that could result in a customer damaging their
iPhone. We have chosen to not publish this type of application to the
App Store.

If you believe you can make the necessary modifications to bring
your application in compliance with iPhone Software License Agreement,
we encourage you to do so and resubmit it for review.

Regards,

iPhone Developer Program

Naja, Schade. Vielleicht beim nächsten Mal.

Für neue Blogupdates anmelden:


6 Gedanken zu “iLevate

    • We did use PhoneGap in the first place. It was difficult because:
      – PhoneGap was not SDK 3.0 compatible
      – Apple rejects PhoneGap applications and being compliant with the iPhone Software License Agreement is difficult enough without PhoneGap
      – the framework has a signifikant boot time
      – PhoneGap does not send the acceleration data fast enough to the browser in real-time, a new method that sends recorded acceleration events would have been necessary

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.