Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Handy-Programmierung mit Python Symbian S60 Andreas Schreiber < [email_address] > Tech Talk, DLR Köln-Porz, 15.07.2008
Smartphones <ul><li>Kombination aus   </li></ul><ul><li>Mobiltelefon („Handy“) </li></ul><ul><li>Personal Digital Assistan...
Betriebssysteme für Smartphones <ul><li>Liste: http://de.wikipedia.org/wiki/Smartphone#Betriebssysteme </li></ul><ul><li>L...
Symbian OS und S60 <ul><li>Symbian OS </li></ul><ul><li>Betriebssystem für Smartphones und PDAs </li></ul><ul><li>Microker...
Symbian Foundation Schaffung einer einheitlichen Software-Plattform <ul><li>News (24.06.2008): </li></ul><ul><li>Nokia übe...
S60 Platform Services Fundamental services <ul><li>Application Framework Services  — providing the basic capabilities for ...
S60 Application Services Certain basic functionality for S60 applications  <ul><li>PIM Application Services  — providing t...
Python for S60 (PyS60) <ul><li>Portierung von Python auf S60-Plattform </li></ul><ul><li>Entwicklung von NOKIA </li></ul><...
“ Hello World” import  appuifw appuifw.app.title = u „Hello World&quot; appuifw.note(u &quot;Hello   World!&quot; ,  'info...
Start des Python-Interpreters
Ausführen von Python-Code (1) Skripte (“Run script”)
Ausführen von Python-Code (2) Interaktive Konsole
Ausführen von Python-Code (3) Bluetooth-Konsole
 
Python API Typen und Bibliotheken von PyS60 <ul><li>Alle Built-In-Typen von  Python 2.2.2  sind vorhanden  </li></ul><ul><...
Python S60-Module (1) Betriebssystem-Zugriff und -Information <ul><li>e32 </li></ul><ul><li>Zugriff auf Betriebssystem-Fun...
Python S60-Module (2) Benutzerschnittstelle und Grafik (I) <ul><li>appuifw </li></ul><ul><li>API für das S60 GUI Applicati...
Python S60-Module (3) Benutzerschnittstelle und Grafik (II) <ul><li>gles </li></ul><ul><li>Python API für OpenGL ES 2D/3D ...
Python S60-Module (4) Audio und Kommunikation <ul><li>audio </li></ul><ul><li>Audio-Funktionen, z.B. Aufnahme, Abspielen v...
Python S60-Module (5) Datenmanagement <ul><li>contacts   </li></ul><ul><li>Zugriff auf Adressbuch ( ContactDb ), z.B. Such...
Struktur von Applikationen (1) Visuelles Layout <ul><li>Typisches visuelles Layout von S60-Applikationen </li></ul>Title N...
Struktur von Applikationen (2) Source-Code-Template <ul><li>Import von Modulen </li></ul><ul><li>Screen Size setzen </li><...
Graphical User Interface ( appuifw )  Basiselemente <ul><li>Dialoge </li></ul><ul><ul><li>note : popup note </li></ul></ul...
Graphical User Interface ( appuifw )  Screen Size <ul><li>Drei Formate für Applikationen </li></ul><ul><li>Rotation der An...
Beispiele
Beispiel „Versenden einer SMS“ (1) Source Code import  appuifw import  messaging data = appuifw.query(u &quot;what are you...
Beispiel „Versenden einer SMS“ (2) Ausführung
Beispiel „Versenden einer SMS“ (3) Erfolgskontrolle beim Empfänger
Beispiel „SMS-Empfang und Sound“ (1) Funktionen <ul><li>Empfang von Befehlen per SMS ( „record“ ,  „stop“ ,  „play“ ,  „cl...
Beispiel „SMS-Empfang und Sound“ (2) Source Code: Sound-Operationen class  SoundRecorder: filename =  'e:oo.wav'   # Drive...
Beispiel „SMS-Empfang und Sound“ (3) Source Code: SMS-Empfang recorder = SoundRecorder() def  message_received(msg_id): bo...
Beispiel „Kamera und File-Upload“ (1) Aufnahme von Bildern import  time import  appuifw import  camera filename = time.str...
Kamera-Einstellungen Optionen von camera.take_photo() def  take_photo( mode= 'RGB16' , size=(640, 480), zoom=0, flash= 'no...
Beispiel „Kamera und File-Upload“ (2) Hochladen auf Server mit httplib import  httplib, urllib, base64, os.path def  image...
Beispiel „Kamera und File-Upload“ (3) Hochladen auf Server
Beispiel „Kamera und File-Upload“ (4) Erfolgskontrolle <ul><li>http://www.onyame.de/upload/fb.php </li></ul>
Beispiel „Mandelbrot-Menge“ (1) Rahmenprogramm import  e32 from  appuifw  import  * app.screen =  'full' app.body = canvas...
Beispiel „Mandelbrot-Menge“ (2) Iterationsschleife for  y  in  range(height): for  x  in  range(width): magnitude = 0 z = ...
Beispiel „Kontakte-Datenbank“ import  contacts db = contacts.open() print u &quot;Searching contacts…&quot; found = db.fin...
Beispiel „Kalender“ <ul><li>Kalender-Abfrage „Python-Events“ </li></ul><ul><li>Umstellung des Profils bei Terminen </li></ul>
Beispiel „Bewegungssensor“ (1) Abfrage der Beschleunigungssensoren import  sensor sensors = sensor.sensors() # Does this d...
Beispiel „Bewegungssensor“ (2) Graphische Aufbereitung: „Sensor Analyzer“  <ul><li>http://jouni.miettunen.googlepages.com/...
Beispiel „Location Based Service“ Auswertung der GSM Cell ID <ul><li>Send SMS to someone if caretan cell is near </li></ul...
Links <ul><li>Python for S60 </li></ul><ul><li>http://opensource.nokia.com/projects/pythonfors60/ </li></ul><ul><li>http:/...
Anlaufstellen für Hilfe <ul><li>Python for S60 discussion board  at Forum Nokia </li></ul><ul><li>http:// discussion.forum...
Python für andere mobile Geräte <ul><li>Übersicht Python for Mobile Devices </li></ul><ul><li>http://www.awaretek.com/pymo...
Literatur <ul><li>Jürgen Scheible, Ville Tuulos. Mobile Python: Rapid Prototyping of Applications on the Mobile Platform  ...
Nächste SlideShare
Wird geladen in …5
×

Handy-Programmierung mit Python

14.428 Aufrufe

Veröffentlicht am

TechTalk von Andreas Schreiber (DLR Köln-Porz, 15.07.2008) über Python-Programmierung auf Symbian S60 mit PyS60.

Veröffentlicht in: Technologie
  • Loggen Sie sich ein, um Kommentare anzuzeigen.

Handy-Programmierung mit Python

  1. 1. Handy-Programmierung mit Python Symbian S60 Andreas Schreiber < [email_address] > Tech Talk, DLR Köln-Porz, 15.07.2008
  2. 2. Smartphones <ul><li>Kombination aus </li></ul><ul><li>Mobiltelefon („Handy“) </li></ul><ul><li>Personal Digital Assistant (PDA) </li></ul><ul><li>Viele Funktionen und Protokolle </li></ul><ul><li>Telefonie, PIM, Web-Browser, SMS, MMS, E-Mail, VoIP, Multimedia, Radio, Digitalkamera, GPS, DVB-H, … </li></ul><ul><li>GSM, UMTS, GRPS, HSCSD, WLAN, Bluetooth, IR, USB, … </li></ul><ul><li>Betriebssystem </li></ul><ul><li>Smartphones haben vollständige, erweiterbare Betriebssysteme </li></ul><ul><li>Handys haben vordefinierte Oberfläche; nur begrenzt erweiterbar (z.B. durch Java) </li></ul>
  3. 3. Betriebssysteme für Smartphones <ul><li>Liste: http://de.wikipedia.org/wiki/Smartphone#Betriebssysteme </li></ul><ul><li>Linux </li></ul><ul><ul><li>Android </li></ul></ul><ul><ul><li>Openmoko </li></ul></ul><ul><li>Mac OS X (Apple iPhone) </li></ul><ul><li>Palm OS </li></ul><ul><li>RIM BlackBerry </li></ul><ul><li>Symbian OS </li></ul><ul><ul><li>UIQ (Sony Ericsson) </li></ul></ul><ul><ul><li>Series 80 (Nokia Communicator) </li></ul></ul><ul><ul><li>Series 60 (Nokia N-series & E-series, Siemens, Samsung, Motorola, Panasonic) </li></ul></ul><ul><li>Windows </li></ul>
  4. 4. Symbian OS und S60 <ul><li>Symbian OS </li></ul><ul><li>Betriebssystem für Smartphones und PDAs </li></ul><ul><li>Microkernel, 32bit, Single User </li></ul><ul><li>GUI-zentriertes Applikations-Framework </li></ul><ul><li>S60 </li></ul><ul><li>Benutzeroberfläche für Smartphones </li></ul><ul><li>Aktuell: S60 3rd Edition </li></ul><ul><li>Entwicklungsumgebungen </li></ul><ul><li>C++, Java, Web Widgets </li></ul><ul><li>(Flash Lite), (Python) </li></ul>Quelle: S60 Platform: Introductory Guide. Nokia Corporation, 2007. http://www.s60.com/business/developers/documents A schematic diagram of the S60 platform architecture.
  5. 5. Symbian Foundation Schaffung einer einheitlichen Software-Plattform <ul><li>News (24.06.2008): </li></ul><ul><li>Nokia übernimmt alle Anteile an Symbian Ltd. </li></ul><ul><li>Gründung einer Symbian Foundation </li></ul><ul><li>http://www.symbianfoundation.org </li></ul><ul><li>Nokia: Übergabe von Symbian und S60 </li></ul><ul><li>Sony Ericsson / Motorola: Übergabe von UIQ </li></ul><ul><li>Gesamtes Betriebssystem wird innerhalb von zwei Jahren komplett Open-Source (Eclipse-Lizenz) </li></ul>Quellen: Nokia Press Release (June 24, 2008), http://www.nokia.com/A4136001?newsid=1230415 Nokia kauft Symbian (heise news, 24.06.2008), http://www.heise.de/newsticker/meldung/109873
  6. 6. S60 Platform Services Fundamental services <ul><li>Application Framework Services — providing the basic capabilities for launching applications and servers, state-persistence management, and UI components. </li></ul><ul><li>UI Framework Services — providing the concrete look and feel for UI components and handling UI events. </li></ul><ul><li>Graphics Services — providing capabilities for the creation of graphics and their drawing to the screen. </li></ul><ul><li>Location Services — allowing the S60 platform to be aware of a device’s location. </li></ul><ul><li>Web-Based Services — providing services to establish connections and interact with Web-based functionality, including browsing, file download, and messaging. </li></ul><ul><li>Multimedia Services — providing the capabilities to play audio and video, as well as support for streaming and speech recognition. </li></ul><ul><li>Communication Services — providing support for local and wide area communications, ranging from Bluetooth technology to voice calls. </li></ul>
  7. 7. S60 Application Services Certain basic functionality for S60 applications <ul><li>PIM Application Services — providing the fundamental features of PIM applications, including contacts, calendar, and task management, as well as associated functions such as notepad and clock capabilities. </li></ul><ul><li>Messaging Application Services — providing support for various messaging types, such as short message service (SMS), multimedia messaging service (MMS), e-mail, BIO messages (smart messaging), and instant messaging (IM). </li></ul><ul><li>Browser Application Services — providing the capabilities to view Web content, including support for Flash Lite, video rendering, Scalable Vector Graphics–Tiny (SVG-T) rendering, and audio rendering. </li></ul>
  8. 8. Python for S60 (PyS60) <ul><li>Portierung von Python auf S60-Plattform </li></ul><ul><li>Entwicklung von NOKIA </li></ul><ul><li>Open-Source-Lizenz (Apache Version 2 und Python) </li></ul><ul><li>Verfügbar bei Sourceforge http://sourceforge.net/projects/pys60 </li></ul><ul><li>Aktuelle Version: 1.4.4 (28.06.2008) </li></ul>
  9. 9. “ Hello World” import appuifw appuifw.app.title = u „Hello World&quot; appuifw.note(u &quot;Hello World!&quot; , 'info' )
  10. 10. Start des Python-Interpreters
  11. 11. Ausführen von Python-Code (1) Skripte (“Run script”)
  12. 12. Ausführen von Python-Code (2) Interaktive Konsole
  13. 13. Ausführen von Python-Code (3) Bluetooth-Konsole
  14. 15. Python API Typen und Bibliotheken von PyS60 <ul><li>Alle Built-In-Typen von Python 2.2.2 sind vorhanden </li></ul><ul><li>Python Standard Library </li></ul><ul><ul><li>Viele der Standard-Module laufen </li></ul></ul><ul><ul><li>Keine Installation, um Speicherplatz im Handy zu sparen </li></ul></ul><ul><li>Python-Extensions für S60: Native C++-Erweiterungen </li></ul><ul><ul><li>Built-in Extensions: </li></ul></ul><ul><ul><li>e32 : API für die Services der Symbian OS Platform </li></ul></ul><ul><ul><li>appuifw : API für das UI Application Framework </li></ul></ul><ul><ul><li>Dynamisch nachladbare Extensions: </li></ul></ul><ul><ul><li>sysinfo, graphics, camera, keycapture, topwindow, gles, glcanvas, sensor, audio, telephone, messaging, inbox, location, positioning, calendar, contacts, e32db, logs </li></ul></ul><ul><ul><li>Entwicklung eigener Extensions per Python/C API möglich </li></ul></ul>
  15. 16. Python S60-Module (1) Betriebssystem-Zugriff und -Information <ul><li>e32 </li></ul><ul><li>Zugriff auf Betriebssystem-Funktion von Symbian, die nicht durch GUI-Module oder die Python Standard Library abgedeckt sind, z.B. Scheduler, Process-Management, Drive-Liste, (Py-)S60-Versionen </li></ul><ul><li>sysinfo </li></ul><ul><li>Systeminformationen, z.B. aktiviertes Profil, Batteriestatus, Displaygröße, gesamter und freier Speicherplatz, OS Version, Signalstärke </li></ul>
  16. 17. Python S60-Module (2) Benutzerschnittstelle und Grafik (I) <ul><li>appuifw </li></ul><ul><li>API für das S60 GUI Application Framework </li></ul><ul><li>graphics </li></ul><ul><li>Grafik- und Bildfunktionen, z.B. Laden, Speichern, Rotieren & Skalieren von Bildern, Erstellen von Grafiken mit Grafikprimitiven und Screenshots </li></ul><ul><li>camera </li></ul><ul><li>Aufnahme von Fotos und Video, Einstellen der Kamera-Parameter </li></ul><ul><li>keycapture </li></ul><ul><li>Abfangen von Tastatur-Events </li></ul><ul><li>topwindow </li></ul><ul><li>Einblenden von Fenstern über Applikationen, dargestellt wird ein graphics.Image </li></ul>
  17. 18. Python S60-Module (3) Benutzerschnittstelle und Grafik (II) <ul><li>gles </li></ul><ul><li>Python API für OpenGL ES 2D/3D Grafik. Siehe OpenGL ES Standard bei Khronos ( http://www.khronos.org/opengles / ) </li></ul><ul><li>glcanvas </li></ul><ul><li>UI Steuerung für OpenGL ES Grafik </li></ul><ul><li>sensor </li></ul><ul><li>Zugriff auf physikalische Sensoren (Bewegung/Acceleration, Antippen/Tapping, Rotation) </li></ul>
  18. 19. Python S60-Module (4) Audio und Kommunikation <ul><li>audio </li></ul><ul><li>Audio-Funktionen, z.B. Aufnahme, Abspielen von Audio-Dateien, Lautstärkeregelung, Sprachausgabe ( text-to-speech ) </li></ul><ul><li>telephone </li></ul><ul><li>Telefonie-Funktionen: Wählen, Auflegen und Rückruf </li></ul><ul><li>messaging </li></ul><ul><li>Senden von SMS und MMS </li></ul><ul><li>inbox </li></ul><ul><li>Zugriff auf Message-Folder (Inbox, Outbox, Sent und Draft) </li></ul><ul><li>location </li></ul><ul><li>Abfrage der GSM-Funkzellen-Informationen </li></ul><ul><li>positioning </li></ul><ul><li>Zugriff auf GPS-Empfänger </li></ul>
  19. 20. Python S60-Module (5) Datenmanagement <ul><li>contacts </li></ul><ul><li>Zugriff auf Adressbuch ( ContactDb ), z.B. Suchen nach Kontakten, Anzeigen von Gruppen, Ändern von Kontaktinformationen, Import/Export von vCards </li></ul><ul><li>calendar </li></ul><ul><li>Zugriff auf die Kalender-Datenbank ( CalendarDb ), z.B. Hinzufügen und Ändern von Terminen, Ereignissen, Geburtstagen und Aufgaben, Behandlung wiederholender Einträge, Import/Export des vCalendar-Formats </li></ul><ul><li>e32db </li></ul><ul><li>Schnittstelle zur nativen Symbian Datenbank, z.B. Anlegen von Datenbanken und SQL-Abfragen </li></ul><ul><li>logs </li></ul><ul><li>Zugriff auf Telefon-Protokolle, z.B. Anrufe, SMS, Daten, Faxe, Mails </li></ul>
  20. 21. Struktur von Applikationen (1) Visuelles Layout <ul><li>Typisches visuelles Layout von S60-Applikationen </li></ul>Title Navigation Tabs Body Menu Exit Dialog
  21. 22. Struktur von Applikationen (2) Source-Code-Template <ul><li>Import von Modulen </li></ul><ul><li>Screen Size setzen </li></ul><ul><li>Applications Menu </li></ul><ul><li>Exit key handler setzen (Callback function) </li></ul><ul><li>Application title setzen </li></ul><ul><li>Application body </li></ul><ul><li>Active Objects </li></ul><ul><li>Main Loop </li></ul>import appuifw import e32 appuifw.app.screen = 'normal' def item1(): print &quot; item1 was selected.” appuifw.app.menu = [(u&quot;item 1&quot;, item1)] def quit(): appuifw.app.set_exit() app.exit_key_handler=quit appuifw.app.title = u 'Simple Application' app_lock = e32.Ao_lock() # starts scheduler -> event processing app_lock.wait() Ausführliches Template unter: http://www.mobilenin.com/pys60/resources/app_skeleton_with_mainloop.py
  22. 23. Graphical User Interface ( appuifw ) Basiselemente <ul><li>Dialoge </li></ul><ul><ul><li>note : popup note </li></ul></ul><ul><ul><li>query : Texteingabe mit einem Feld </li></ul></ul><ul><ul><li>multi_query : Texteingabe mit zwei Feldern </li></ul></ul><ul><li>Menus </li></ul><ul><ul><li>popup_menu : Einfaches Menu </li></ul></ul><ul><li>Auswahllisten </li></ul><ul><ul><li>selection_list : Einfache Listenauswahl (vgl. „Radio buttons“) </li></ul></ul><ul><ul><li>multi_selection_list : Mehrfachauswahl (vgl. „Check boxes“) </li></ul></ul>
  23. 24. Graphical User Interface ( appuifw ) Screen Size <ul><li>Drei Formate für Applikationen </li></ul><ul><li>Rotation der Anzeige ist möglich (portrait, landscape) </li></ul>normal large full
  24. 25. Beispiele
  25. 26. Beispiel „Versenden einer SMS“ (1) Source Code import appuifw import messaging data = appuifw.query(u &quot;what are you doing?&quot; , &quot;text&quot; ) receiver = &quot;+49172940****&quot; if appuifw.query(u &quot;Send message?&quot; , &quot;query&quot; ) == True : messaging.sms_send(receiver, data) appuifw.note(u &quot;Message sent.&quot; , &quot;info&quot; ) else : appuifw.note( u&quot;Messages not sent!&quot; , &quot;info&quot; ) s60test.send_sms.py
  26. 27. Beispiel „Versenden einer SMS“ (2) Ausführung
  27. 28. Beispiel „Versenden einer SMS“ (3) Erfolgskontrolle beim Empfänger
  28. 29. Beispiel „SMS-Empfang und Sound“ (1) Funktionen <ul><li>Empfang von Befehlen per SMS ( „record“ , „stop“ , „play“ , „clear“ ) </li></ul><ul><li>Aufzeichnen und Abspielen von Audio </li></ul>
  29. 30. Beispiel „SMS-Empfang und Sound“ (2) Source Code: Sound-Operationen class SoundRecorder: filename = 'e:oo.wav' # Drive E: is SD card mySound = None def record(self): self.mySound = audio.Sound.open(self.filename) self.mySound.record() def play(self): try : self.mySound = audio.Sound.open(self.filename) self.mySound.play() except : appuifw.note(u &quot;No sound recorded!&quot; , &quot;error&quot; ) def stop(self): if self.mySound: self.mySound.stop() self.mySound.close() def clear(self): self.stop() os.remove(self.filename)
  30. 31. Beispiel „SMS-Empfang und Sound“ (3) Source Code: SMS-Empfang recorder = SoundRecorder() def message_received(msg_id): box = inbox.Inbox() sms_text = box.content(msg_id) appuifw.note(u &quot;sms content: &quot; + sms_text , &quot;info&quot; ) if sms_text == &quot;play&quot; : recorder.play() elif sms_text == &quot;record&quot; : recorder.record() elif sms_text == &quot;stop&quot; : recorder.stop() elif sms_text == &quot;clear&quot; : recorder.clear() app_lock.signal() box = inbox.Inbox() box.bind(message_received)
  31. 32. Beispiel „Kamera und File-Upload“ (1) Aufnahme von Bildern import time import appuifw import camera filename = time.strftime( &quot;n95-%Y%m%d%H%M%S.jpg&quot; , time.gmtime()) image = camera.take_photo() image.save(filename) appuifw.note(u &quot;Photo saved to %s&quot; % filename, 'info' ) if imageToURL(filename) == 200: appuifw.note(u &quot;Photo uploaded successfully.&quot; , 'info' ) else : appuifw.note(u &quot;Photo upload failed!&quot; , 'error' )
  32. 33. Kamera-Einstellungen Optionen von camera.take_photo() def take_photo( mode= 'RGB16' , size=(640, 480), zoom=0, flash= 'none' , exposure= 'auto' , white_balance= 'auto' ):
  33. 34. Beispiel „Kamera und File-Upload“ (2) Hochladen auf Server mit httplib import httplib, urllib, base64, os.path def imageToURL(aPath): data = open(aPath, 'rb' ).read() # read binary data of picture encodedData = base64.encodestring(data) # encoded it to base64 headers = { &quot;Content-type&quot; : &quot;application/x-www-form-urlencoded&quot; , &quot;Accept&quot; : &quot;text/plain&quot; ,} params = urllib.urlencode({u 'fileName' : os.path.split(aPath)[1], u 'data' :encodedData}) conn = httplib.HTTPConnection( &quot;www.onyame.de&quot; ) conn.request( &quot;POST&quot; , &quot;/image_uploader.php&quot; , params, headers) response = conn.getresponse() conn.close() return response.status Quelle: http://wiki.forum.nokia.com/index.php/How_to_upload_a_file_to_server_with_application/x-www-form-urlencoded
  34. 35. Beispiel „Kamera und File-Upload“ (3) Hochladen auf Server
  35. 36. Beispiel „Kamera und File-Upload“ (4) Erfolgskontrolle <ul><li>http://www.onyame.de/upload/fb.php </li></ul>
  36. 37. Beispiel „Mandelbrot-Menge“ (1) Rahmenprogramm import e32 from appuifw import * app.screen = 'full' app.body = canvas = Canvas() width, height = canvas.size xaxis = width/2 yaxis = height/1.5 scale = 60 iterations = 25 # <<iteration>> lock = e32.Ao_lock() app.exit_key_handler = lock.signal lock.wait()
  37. 38. Beispiel „Mandelbrot-Menge“ (2) Iterationsschleife for y in range(height): for x in range(width): magnitude = 0 z = 0+0j c = complex(float(y-yaxis)/scale, float(x-xaxis)/scale) for i in range(iterations): z = z**2+c if abs(z) > 2: v = 765*i/iterations if v > 510: color = (255, 255, v%255) elif v > 255: color = (255, v%255, 0) else : color = (v%255, 0, 0) break else : color = (0, 0, 0) canvas.point((x, y), color) e32.ao_yield()
  38. 39. Beispiel „Kontakte-Datenbank“ import contacts db = contacts.open() print u &quot;Searching contacts…&quot; found = db.find( 'guy' ) # search in name, email, etc. for guy in found: firstname = guy.find( 'first_name' )[0].value company = guy.find( 'company_name' )[0].value email_address = guy.find( 'email_address' )[0].value print u &quot;%s %s %s&quot; % (firstname, company, email_address)
  39. 40. Beispiel „Kalender“ <ul><li>Kalender-Abfrage „Python-Events“ </li></ul><ul><li>Umstellung des Profils bei Terminen </li></ul>
  40. 41. Beispiel „Bewegungssensor“ (1) Abfrage der Beschleunigungssensoren import sensor sensors = sensor.sensors() # Does this device have Accelerator Sensor if sensors.has_key( 'AccSensor' ): SENSOR_ACC = True sensor_data = sensors[ 'AccSensor' ] sensor_acc = sensor.Sensor(sensor_data[ 'id' ], sensor_data[ 'category' ]) sensor_acc.connect(handle_sensor_raw) def handle_sensor_raw(a_data): if a_data.has_key( 'data_1' ): acc_data_1 = a_data[ 'data_1' ] acc_data_2 = a_data[ 'data_2' ] acc_data_3 = a_data[ 'data_3' ]
  41. 42. Beispiel „Bewegungssensor“ (2) Graphische Aufbereitung: „Sensor Analyzer“ <ul><li>http://jouni.miettunen.googlepages.com/sensoranalyzer </li></ul>
  42. 43. Beispiel „Location Based Service“ Auswertung der GSM Cell ID <ul><li>Send SMS to someone if caretan cell is near </li></ul>import location HOME_CELL_ID = u&quot;98521779&quot; WIFE = u&quot;+49173247****“ entries = [u &quot;freu mich auf Dich!&quot; , u &quot;hab Hunger.&quot; , u &quot;hab schlechte Laune.&quot; ] listbox = appuifw.Listbox(entries, shout) home = 0 while home == 0: country, provider, lac, cell = location.gsm_location() if (cell== HOME_CELL_ID): home = 1 message = u &quot;Bin gleich zuhause und %s&quot; % mood messaging.sms_send(WIFE, message)
  43. 44. Links <ul><li>Python for S60 </li></ul><ul><li>http://opensource.nokia.com/projects/pythonfors60/ </li></ul><ul><li>http://sourceforge.net/projects/pys60 </li></ul><ul><li>http://wiki.opensource.nokia.com/projects/Python_for_S60 </li></ul><ul><li>Symbian S60 </li></ul><ul><li>http://www.s60.com </li></ul>
  44. 45. Anlaufstellen für Hilfe <ul><li>Python for S60 discussion board at Forum Nokia </li></ul><ul><li>http:// discussion.forum.nokia.com/forum/forumdisplay.php?forumid =102 </li></ul><ul><li>IRC channel #pys60 bei Freenode.net </li></ul><ul><li>irc://chat.freenode.net/pys60 </li></ul><ul><li>Google Group Python for S60 </li></ul><ul><li>http://groups.google.com/group/py4S60 </li></ul><ul><li>Google Group PythonS60 </li></ul><ul><li>http://groups.google.com/group/pythons60 </li></ul><ul><li>Beispiele / Code-Snippets </li></ul><ul><li>http://wiki.forum.nokia.com/index.php/Category:Python#Code_Examples_for_Python </li></ul><ul><li>http://snippets.dzone.com/tags/series60 </li></ul>
  45. 46. Python für andere mobile Geräte <ul><li>Übersicht Python for Mobile Devices </li></ul><ul><li>http://www.awaretek.com/pymo.html </li></ul>
  46. 47. Literatur <ul><li>Jürgen Scheible, Ville Tuulos. Mobile Python: Rapid Prototyping of Applications on the Mobile Platform http://www.mobilepythonbook.org </li></ul>

×