05 pys60_multimédia_v2
TRANSCRIPT
Bevezetés a mobil szoftverfejlesztésbe
Dr. Forstner Bertalan
© BME-AAIT 2008 1Bevezetés a mobil szoftverfejlesztésbe – 5. előadás
Az Amorg a Twitteren� Versenyek, ZH és vizsgaeredmények,
linkek, események és sok más hasznos dolog
� Kövesd: bme_amorg_lite
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 1. előadás 2
� Kövesd: bme_amorg_lite
Az előző rész tartalmából� User Interface
� Az alkalmazás felülete
� Text widget
� Tabok
� Dialógusok� Note
� Adatbekérő ablak
� Választólista
� Többszörös választólista
� Űrlap
� Listbox és ikonok© BME-AAIT 2008 3Bevezetés a mobil szoftverfejlesztésbe – 5. előadás
Emlékeztek még rá…Milyen beviteli mezők lehetnek egy űrlapon?
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 4
Emlékeztek még rá…Milyen beviteli mezők lehetnek egy űrlapon?
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 5
5. előadás – PyS60 Multimédiás lehetőségek
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 6
Tartalom� Graphics modul
� Grafikus primitívek
� Bitmapek használata
Billentyű kezelés� Billentyű kezelés
� Kamera használata
� Hangkeltés
� Külső tartalom-megjelenítés
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 7
Graphics modul� Kétdimenziós grafikák elkészítéséhez:
grafikai primitívek
� Rajzolás a vászonra: Canvas
� canvas = appuifw.Canvas(redraw_callback = ujrarajzolas_fv, � canvas = appuifw.Canvas(redraw_callback = ujrarajzolas_fv, event_callback = billentyukezeles_fv)
� Vagy Image objektumra
� Megjelenítés� appui.app.body=canvas
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 8
Rajzolási kontextus� Opció paraméterek segítségével
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 9
Koordináták megadása� Vásznon, képen belüli „tájékozódáshoz”
� tetszőleges típusú szekvenciában (pl. ennes, lista)
� koordináta-párok tetszőleges, kételemű � koordináta-párok tetszőleges, kételemű szekvenciákként
� vagy pedig maguk a koordináták, � minden ponthoz egymást követően egy x és egy y
koordináta érték
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 10
Koordináták: példák(1,1)
((1,2))
((1,1),(1,2))
([1.1, 1.2][-2.0, -2.2])
(1,1,5,5)
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 11
Rajzoló primitívek 1� line(koordináták, opciók)
� polygon(koordináták, opciók)
� rectangle(bal_felső_sarok, jobb_alsó_sarok, opciók)jobb_alsó_sarok, opciók)
� ellipse(bal_felső_sarok, jobb_alsó_sarok, opciók)
� pieslice(bal_felső_sarok, jobb_alsó_sarok, kezdet, vég, opciók)
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 12
Rajzoló primitívek 2� arc(bal_felső_sarok, jobb_alsó_sarok, kezdet,
vég, opciók)
� point((x, y), opciók)
� clear([háttérszín= (255,255,255)])� clear([háttérszín= (255,255,255)])
� text((x,y), szöveg, [fill=szín, font])
� measure_text(text, [font=None, maxwidth=-1, maxadvance=-1])
� (bounding_rect, cursorAdvance, NumberOfChars)
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 13
Példa 1def view1():
t = appuifw.Text()appuifw.app.body = tt.clear()t.font='title't.color=(255,0,0)t.set(u'Szöveges nézet.')
def view2():global canvas, imageglobal canvas, imageappuifw.app.body = canvas
def changetab(index): appuifw.app.activate_tab( index)if index==0:view1()
else:view2()
def redraw(rect):global image, canvascanvas.blit(image)
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 14
Példa 2
canvas = appuifw.Canvas(redraw_callback = redraw)w, h=canvas.sizeimage = graphics.Image.new((w,h))image.line((0,0,200,200), width=3, outline=(255,0,0))image.line((200,200,200,0,0,100), width=5, outline=(0,0,255))image.polygon((40,20,50,30,40,40,30,30), fill=(0,255,0))image.rectangle((70,70,90,90),outline=(0,0,255),fill=(255,0,0),width=4)image.ellipse((20,50,40,100), outline=(0,0,0))image.ellipse((20,50,40,100), outline=(0,0,0))image.pieslice((60,150,90,200), 10,20, fill=(255,255,0))
appuifw.app.set_tabs([u"szöveg", u"rajz"], changetab)changetab(1)
�Demo
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 15
Bitképek� Image objektum: memóriában tárolt bitkép
� Függvények opcionális callback paraméterrel
� paramétere a hibakód� paramétere a hibakód
� 0: hibamentes lefutás
� Az Image.new(size, [mode='RGB16']) � 'RGB12', 'RGB16', 'RGB' (ez 24 bites), '1' (fekete-fehér), 'L' (8 bites
szürkeárnyalatos)
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 16
Bitképek használata 1� load(fájlnév, callback): meglévő objektum
� a kép dimenziói meg kell egyezzenek az éppen megnyitandó kép méreteivel
� open(fájlnév, callback): factory
� teljes path
� PNG, JPEG
� Image.inspect(fájlnév)
� szótárral tér vissza
� 'size' kulcsszó alatt tartalmazza a fájl által tartalmazott kép méretét
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 17
Bitképek használata 2� save(fájlnév, [callback=None, format=None, quality=75,
bpp=24, compression=default])
� Fájlformátum� jpeg
� Quality: tömörítés minősége egy 1-100-ig terjedő skálán � Quality: tömörítés minősége egy 1-100-ig terjedő skálán
� png� Bpp: Színmélység: 1, 8, 24� Compression: ‘best’, ‘fast’, ‘no’, ‘default’
� None formátum esetén a fájl kiterjesztése dönt
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 18
Műveletek képekkel� resize(méret, [callback, keepaspect=0])
� visszatérési értéke az új bitmap
� keepaspect=1: méretarány megtartása
transpose(irány, [callback])� transpose(irány, [callback])� visszatérési értéke az új bitmap
� FLIP_LEFT_RIGHT, FLIP_TOP_BOTTOM, ROTATE_90, ROTATE_180, ROTATE_270
� stop()
� Aszinkron esemény leállítása
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 19
Bitképek másolása� célkép.blit(forráskép, [target=(0,0), source=((0,0),
image.size), mask=None, scale=0])� target, source:
� egy koordináta pár� két koordinátapár: célnégyzet
� scale=1: on-the-fly átméretezés a cél betöltésére
� maszk kép� 1 bites vagy 8 bites szürkeárnyalatos � A képnek csak azok a részei lesznek átmásolva (vagy
áttetszően átmásolva), amelyek a maszk képen fehér árnyalatúak.
� a maszk kép mérete meg kell, hogy egyezzen a forráskép méretével.
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 20
Példa1bitmap = graphics.Image.open(u"C:\\amorg.png")
appuifw.app.body.clear()tab=2canvas = appuifw.Canvas(redraw_callback = redraw)canvas.clear()w, h=canvas.sizeimage = graphics.Image.new((w,h))image = graphics.Image.new((w,h))image.line((0,0,200,200), width=3, outline=(255,0,0))image.line((200,200,200,0,0,100), width=5, outline=(0,0,255))image.polygon((40,20,50,30,40,40,30,30), fill=(0,255,0))image.rectangle((70,70,90,90),outline=(0,0,255),fill=(255,0,0),width=4)image.ellipse((20,50,40,100), outline=(0,0,0))image.pieslice((00,00,90,200), 0,1.57, outline=(255,255,0))image.text((90,200), u"Árvíztűrő", font="title")image.save("c:\\abstract.png")
bitmap2=graphics.Image.open(u"C:\\abstract.png")bitmap2 = bitmap2.transpose(graphics.ROTATE_90)bitmap2 = bitmap2.resize((90,90))
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 21
Példa 2def redraw(rect):
global image, canvas, tab, bitmap, bitmap2if tab==1:canvas.blit(image)
if tab==2:canvas.blit(bitmap, target=(50,80), source=(0,0))canvas.blit(bitmap2, target=(40,140), source=(0,0))
�Demo
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 22
Billentyűzet események kezelése� Egyes UI elemek maguktól helyesen
lekezelik a gombnyomásokat
� Első módszer: Cavas objektumhoz billentyű kódok kötésebillentyű kódok kötése
� bind(keycode, callback)
� minden egyes billentyűhöz külön callback függvény
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 23
Key_code, scan_code
Key code Scan code1 EKeyLeftSoftkey EScanCodeLeftSoftkey2 EKeyRightSoftkey EScanCodeRightSoftkey3 EKeyYes EScanCodeYes4 EKeyNo EScanCodeNo5 EKeyLeftArrow EScanCodeLeftArrow6 EKeyRightArrow EScanCodeRightArrow7 EKeyUpArrow EScanCodeUpArrow7 EKeyUpArrow EScanCodeUpArrow8 EKeyDownArrow EScanCodeDownArrow9 EKeyEdit EScanCodeEdit10 EKeyBackspace EScanCodeBackspace11 EKeyStar EScanCodeStar12 EKeyHash EScanCodeHash13 EKeySelect EScanCodeSelect14 EKeyMenu EScanCodeMenu15 EKey1 EScanCode1
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 24
Keycode: Oprendszer által feldolgozva, pl. 'a' és 'A' különbözőScancode: szorosabb leképzés a billentyűzetre
Példaimport appuifw, key_codes, e32
def handle1():appuifw.note(u"Egy: Megérett a meggy.", "conf")
def handle2():appuifw.note(u"Kettő: Csipkebokorvessző.", "conf")
def handle3():appuifw.note(u"Három: Ezt elfelejtettem.", "error")
canvas = appuifw.Canvas()appuifw.app.body = canvascanvas.bind(key_codes.EKey1, handle1)canvas.bind(key_codes.EKey2, handle2)canvas.bind(key_codes.EKey3, handle3)
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 25
Érintés események� bind függvénnyel
� keycode helyett:
� EButton1Down a megérintést,
� EButton1Up az érintés végét, � EButton1Up az érintés végét,
� EDrag a megérintett állapotban történő húzás eseményt,
� ESwitchOn paraméter a kijelző érintés miatti bekapcsolását jelzi
� Harmadik paraméter: koordináta párt tartalmazó kettes, amelyre szűrünk
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 26
Villódzás ellen� begin_redraw(rect) és end_redraw()
� a keretrendszer tudtára adjuk, hogy jelenleg egy újrarajzolási folyamat történik
� A függvénypáros használatával nagyban � A függvénypáros használatával nagyban csökkenthetjük a képernyő villódzását, illetve erőforrásokat takaríthatunk meg.
DEMO
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 27
Példa 1x = []
xx = []
y = []
yy = []
c=[]
count=0
def create_circle():
global x, y, xx, yy, c, countglobal x, y, xx, yy, c, count
x.append(random.randint(0,100))
y.append(random.randint(0,100))
xx.append(random.choice([-2, -1, 1, 2]))
yy.append(random.choice([-2, -1, 1, 2]))
c.append((random.randint(0,255), random.randint(0,255),
random.randint(0,255)))
count = count +1
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 28
Példa 2
t=appuifw.app.body
canvas = appuifw.Canvas()
appuifw.app.body = canvas
w, h=canvas.size
image = graphics.Image.new((w,h))
for i in xrange(0,6):for i in xrange(0,6):
create_circle()
ao_timer = e32.Ao_timer()
appuifw.app.exit_key_handler = quit
app_lock = e32.Ao_lock()
ao_timer.after(0.05, movethem)
app_lock.wait()
ao_timer.cancel()
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 29
Példa 3def movethem():
[…]
image.clear()
for i in xrange(0, count):
canvas.bind(key_codes.EButton1Down, None, ((x[i],y[i]),(x[i]+40,y[i]+40)))
x[i]+=xx[i]
if ((x[i]>w-40) or (x[i]<=0)):
xx[i]=-xx[i]
y[i]+=yy[i]
if ((y[i]>h-40) or (y[i]<=0)):if ((y[i]>h-40) or (y[i]<=0)):
yy[i]=-yy[i]
canvas.bind(key_codes.EButton1Down, clicked, ((x[i],y[i]),(x[i]+40,y[i]+40)))
image.ellipse((x[i],y[i],x[i]+40,y[i]+40), outline=(255,255,255), fill=c[i])
image.ellipse((x[i]+12,y[i]+24,x[i]+16,y[i]+28), outline=(255,255,255),
fill=(215, 215, 215))
canvas.begin_redraw()
canvas.blit(image)
canvas.end_redraw()
ao_timer.after(0.03, movethem)
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 30
Példa 4def clicked(coords):
global canvas, x, y, xx, yy, count
(selectedx, selectedy) = coords
for i in xrange(0, count):
if(x[i]<=selectedx<=x[i]+40 and y[i]<=selectedy<=y[i]+40):
if(xx[i]==0):
xx[i]=random.choice([-2, -1, 1, 2])
yy[i]=random.choice([-2, -1, 1, 2])
else:else:
xx[i]=0
yy[i]=0
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 31
Event_callback� Azokon az objektumokon, amelyeknél beállíthatunk
event_callback függvényt (pl. Canvas, Listbox)
� Callback paramétere egy event dictionary� event['keycode']
� event['scancode']� event['scancode']
� event['modifiers']� pl. EModifierShift & EModifierControl
� event['type']� EEventKeyDown � EEventKeyUp� EEventKey� EButton1Up, EButton1Down, Edrag, stb.
� event[‘pos']
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 32
Példa 1speed=10 #Kezdeti sebességy=180 #Kezdeti pozíció a képernyőndown=0 #Volt-e már lenyomva billentyű
canvas = appuifw.Canvas(event_callback = handle_keyboard)appuifw.app.body = canvasw, h=canvas.sizeimage = graphics.Image.new((w,h))
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 33
Példa 2def handle_keyboard(event):
global image, speed, downif event['type']==appuifw.EEventKeyUp and down==1:
shoot()down=0
if event['keycode']==key_codes.EKeySelect and event['type']==appuifw.EEventKey:speed = speed+3down=1if speed>100:if speed>100:
speed=100image.clear()image.rectangle((0,0,10,100),outline=(0,0,255), fill=(255,255,255),width=2)image.rectangle((0,100-speed,10,100),outline=(255,0,0),fill=(255,0,0),width=2)image.ellipse((100,180,140,220), outline=(255,255,255), fill=(255, 0, 0))image.ellipse((112,204,116,208), outline=(255,255,255), fill=(215, 215, 215))canvas.blit(image)
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 34
Példa 3def shoot():
global speed, y, imagesound=audio.Sound.open(u"e:\\python\\shoot.wav")sound.play(1)e32.ao_sleep(1)while (speed>10):
y=y-(speed/10)speed=speed-1image.clear()image.clear()image.ellipse((100,y,140,y+40), outline=(255,255,255), fill=(255, 0, 0))image.ellipse((112,y+24,116,y+28), outline=(255,255,255), fill=(215, 215, 215))canvas.blit(image)e32.ao_sleep(0.05)
y=180sound.stop()
�Demo
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 35
Kamera használata� Camera modul
� Nemritkán két kamera
� Videohívás, filmfelvétel
Rengeteg beállítási lehetőség� Rengeteg beállítási lehetőség
� Viewfinder
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 36
Kamera beállításacameras_available() Visszatérési értéke egy szám, amely megmondja, hogy
hány kamera áll rendelkezésünkre fizikailag a mobileszközön.
image_modes() Egy sztringekből álló listával tér vissza, amelynekelemei az egyes színmélységek, amelyeket a kameratámogat. Pl. ['RGB12', 'RGB16', 'RGB', 'JPEG_Exif']
image_sizes() Szintén egy listával tér vissza, amely a támogatottfényképfelbontások ketteseit tartalmazza. Pl. [(640,fényképfelbontások ketteseit tartalmazza. Pl. [(640,480), (160, 120)]
flash_modes Visszatér a lehetséges vaku üzemmódokkal. Pl. ['auto','none', 'forced', 'red_eye_reduce']
max_zoom() A készülék által támogatott maximális digitális zoomértékkel tér vissza. Nokia N95 esetében ez 80.
exposure_modes() A képkészítési (exponálási) módokat adja visszasztring listaként. Pl. ['auto', 'center', 'backlight', 'night’]
white_balance_modes() A készülék által támogatott fehéregyensúly beállításértékekkel tér vissza, pl. ['daylight', 'fluorescent','tungsten', 'auto', 'cloudy']
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 37
Kamera keresőképe, fotózás� start_finder(callback)
� A callback paramétere egy kép
� Másodpercenként többször meghívódik
stop_finder()� stop_finder()� take_photo([mode='RGB16', size=(640, 480), flash='auto', zoom=0,
exposure='auto', white_balance='auto', position=0])
� Position: több kamerás készülék (0 = hátoldali kamera)
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 38
PéldaPICTURE = "E:\\Python\\photo.jpg"
def finder_callback(img):canvas.blit(img)
def make_photo():try:canvas.bind(key_codes.EKeySelect, shoot)camera.start_finder(finder_callback)
except Exception, e:except Exception, e:appuifw.note( unicode( e ), 'error' )
def shoot():camera.stop_finder()photo = camera.take_photo(size = (640,480))w,h = canvas.sizecanvas.blit(photo,target=(0, 0, w, 0.75 * w), scale = 1)photo.save(PICTURE)canvas.bind(key_codes.EKeySelect, None)
canvas = appuifw.Canvas()appuifw.app.body=canvasmake_photo()
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 39
Video rögzítés� start_record(filename, callback): videorögzítés
indítása
� Előtte viewfindert kell indítani!
� Calback: a státuszról ad információt a paramétere
� stop_record()
� release()
� A kamerahardver átengedése más alkalmazásoknak
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 40
Hangkeltés 1� Audio modul
� WAV, AMR, AAC, MIDI, MP3, RealAudio
� Sound objektum� open(fájlnév)
play([hanyszor=1, szunet=0])� play([hanyszor=1, szunet=0])
� Nem blokkoló� audio.KMdaRepeatForever
� Több hang egyszerre nem lehet
� Ugyanazon az objektumon szimultán lejátszás: hiba
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 41
Hangkeltés 2� state(): állapot
� ENotReady
� EPlaying
� ERecording
� EOpen
� close()� close()
� stop()
� current_volume()
� max_volume()
� set_volume(int)
� current_position() //mikroszekundum
� duration()
� set_position(microseconds)
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 42
Hangfelvétel� Sound.record()
� WAV vagy AMR
� Stop() hívásig
Telefonhívás alatti felvétel vagy lejátszás� Telefonhívás alatti felvétel vagy lejátszás
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 43
Példa 1appuifw.app.exit_key_handler = quitappuifw.app.menu = [(u"köszön", (
(u"helló", doPlayHello),(u"viszlát", doPlayGoodbye),)),
(u"felvesz", ((u"helló", doRecordHello),(u"viszlát", doRecordGoodbye),))]))]
sound = None
def doRecordHello():doRecord(u"C:\\hello.wav")
def doRecordGoodbye():doRecord(u"C:\\bye.wav")
def doPlayHello():doPlay(u"C:\\hello.wav")
def doPlayGoodbye():doPlay(u"C:\\bye.wav")
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 44
Példa 2def doRecord(filename):
global soundif sound:
sound.stop()os.remove(filename)sound=audio.Sound.open(filename)sound.record()appuifw.note(u"Halljam.", "conf")e32.ao_sleep(3)e32.ao_sleep(3)sound.stop()appuifw.note(u"Felvettem.", "conf")
def doPlay(filename):global soundif sound:
sound.stop()sound=audio.Sound.open(filename)sound.play()
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 45
Szöveg felolvasása stringből� Újabb okostelefonokon
� audio modul, text-to-speech
input = appuifw.query(u"Mondja, mi a gondja!", "text")
audio.say(input)
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 46
Content_handler� appuifw modul egy speciális szolgáltatása
� különböző tartalmak megjelenítése
� MIME típus alapján
� handler = appuifw.Content_handler(callback)
� open(content_file)
� open_standalone(content_file) � külön processzben
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 47
Példadef done():
appuifw.note(u"Kész!", "conf")
app_lock.signal()
handler = appuifw.Content_handler(done)
handler.open("E:\\Python\\marklar.mp4")handler.open("E:\\Python\\marklar.mp4")
appuifw.app.exit_key_handler = quit
app_lock = e32.Ao_lock()
app_lock.wait()
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 48
Összefoglalás� Graphics modul
� Grafikus primitívek
� Bitmapek használata
Billentyű kezelés� Billentyű kezelés
� Kamera használata
� Hangkeltés
� Külső tartalom-megjelenítés
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 49
Teszt� Mi a különbség a scancode és a keycode
között?
� Milyen rajzolási primitívek vannak PyS60 alatt?alatt?
� Mi a position paraméter szerepe fotó készítésénél?
© BME-AAIT 2008 Bevezetés a mobil szoftverfejlesztésbe – 5. előadás 50