198

Androidos szoftverfejlesztés

Embed Size (px)

Citation preview

Page 1: Androidos szoftverfejlesztés
Page 2: Androidos szoftverfejlesztés

Tisztelt Olvasd!Androidos okostelefonokat rengetegen használnak, akik közűi bizonyára sokan gondolkodtak már el azon, hogy saját maguk is készítsenek programokat a mobiljukra.A lehetőség most ado tt lett. Jelen könyv segítségével ugyanis könnyen értelmezhető' példákon keresztül ismer־ kedhetünk meg a mobilfejlesztés alapvető' elméleti hátte- réve! és gyakorlati fogásaival.A könyv a külföldön igen népszerű Adobe AIR és az Apache Fiex technológiákra épül, melyekkel más programozási nyelvekhez viszonyítva sokka' egyszerűbben és gyorsabban fejleszthetünk látványos mobílalkalmazásokat Amdroidra, \

[íOS-re és Wíndotvsra is M könyvet a mélyebb'ismeretekre vágyó felhasználók éppug^asznósnak találjákTnájd/mint

záő, vagy tapaszta lt fejlesztők, akik most ismerkednek Wk Adobe AIR-aiapü alkalmazáskészítéssel. '

ISBN 978-963-9425-88־(Ajánlott bruttó 1490 Ft.fogyasztó ár:

Page 3: Androidos szoftverfejlesztés

BBS-INFO Kiadó, 2014.

Page 4: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon

Minden jog fenntartva! A könyv vagy annak oldala- inak másolása, sokszorosítása csak a kiadó írásbeli hozzájárulásával történhet.

Az Android™ és az Android logo a Google Inc. védjegye.

A könyv nagyobb mennyiségben megrendelhető a kiadónál: BBS-IIMFO Kiadó, 1630 Bp. Pf. 21. Tel.: 407-17-07

A könyv megírásakor a szerző és a kiadó a lehető legnagyobb gondossággal járt el. Ennek ellenére, mint minden könyvben, ebben is előfordulhatnak hibák. Az ezen hibákból eredő esetleges károkért sem a szerző, sem a kiadó semmiféle felelősséggel nem tartozik, de a kiadó szívesen fogadja, ha ezen hibákra felhívják figyelmét.

ISBN 978-963-9425-88-0

Kiadja a BBS-INFO Kft.1630 Budapest, Pf. 21.Felelős kiadó: a BBS-INFO Kft. ügyvezetője Nyomdai munkák: Bíró Family Nyomda Felelős vezető: Bíró Krisztián

Page 5: Androidos szoftverfejlesztés

5I ,irta lomjegyzék

TARTALOMJEGYZÉK

ITőszó................................................................................... 9Kiknek szól ez a könyv?...............................................9Miben történik a fejlesztés?........................................ 10A könyv felépítése...................................................... 11A könyvben használt jelölések...................................13

1. Felkészülés a fejlesztésre......................................... 141.1. Az Adobe AIR platformról................................... 141.2. Az Androidról és a statisztikákról.......................161.3. A mobilfejlesztés fő szempontjai..........................17

1.3.1. A mobilalkalmazásoknála minőség kiemelt szempont................ 17

1.3.2. A mobilvilág m ás...................................171.3.3. Tudatosan kezeljük a jogosultságokat!....171.3.4. Ésszerű keretek között tartott

kompatibilitás........................................ 191.3.5. Takarékoskodni az erőforrásokkal......191.3.6. A v7-es.................................................... 201.3.7. A 3D-s megjelenítés

mobileszközökön is lehetséges............ 21

Page 6: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon6

1.3.8. Ez a RAM nem az a RAM......................211.3.9. Itt repül a kismadár!..............................221.3.10. Szenzorok: izgalmas technológiák

egy helyen.............................................. 231.3.11. Akkumulátor: Bírni szusszal.................241.3.12. FullHD-n innen és túl............................ 241.3.13. Képfeldolgozás: tárhely kontra

sebesség.................................................. 251.3.14. Nagyfokú hibatűrés...............................261.3.15. A teljesítménytervezés lehetőségei..... 26

1.4. Mire lesz szükségünk?..................................... 271.5. MySQL...................................................... 271.6. PHP és Apache.................................................. 29

1.6.1. Verziódzsungel...................................... 301.6.2. Üzembehelyezés.................................... 321.6.3. A PHP és a MySQL tesztelése.............. 33

1.7. Fejlesztőeszköz...................................................... 362. A Flash Builder..........................................................37

2.1. A Flash Builder és a mobilvilág........................... 372.2. A Flash Builder telepítése.................................... 382.3. A Flash Builder kezelőfelülete............................. 462.4. Az első mobilprojekt létrehozása.........................49

2.4.1. Pár szó a Flex SDK-ról...........................512.5. Az -app.xml fájlról............................................... 582.6. Az alkalmazások Flex forráskódja.......................622.7. Az első futtatás...................................................... 662.8. Kész alkalmazások publikálása........................722.9. Projektek exportálása, importálása.....................79

Page 7: Androidos szoftverfejlesztés

rarta lomjegyzék______ _ _ _________________________ 7

3. Flex/ActionScript alapismeretek................................843.1. A ctionScrip t .......................................................... 84

3.1.1. Adattípusok.............................................843.1.2. Utasítások................................................ 873.1.3. Megjegyzések a kódban......................... 883.1.4. Operátorok és precedenciák...................883.1.5. Elágazási szerkezetek.............................903.1.6. Ciklusok................................................... 933.1.7. Függvények.............................................963.1.8. Hozzáférések szabályozása....................973.1.9. Osztályok................................................. 98

3.2. Flex...................................................................1003.2.1. XML forráskódok írása......................... 1003.2.2. Megjegyzések a kódban....................... 1023.2.3. Alapvető vizuális Flex komponensek ....102

3.3. Az ActionScript kód beágyazása Flex kódba ....1134. Példaprogramok.........................................................115

4.1.Inicializációs függvény írása..............................1154.2. Gomblenyomás kezelése.................................1204.3. Input-output események kezelése.....................125

5. Adatbázis-kezelő mobilalkalmazás készítése........1355.1. Adatcsere PHP szkriptekkel..............................1365.2. Adatbázis-kezelő PHP szkriptek megírása.......1395.3. PHP szkriptek kezelése ActionScript-ből..........142

5.3.1. Szkriptfuttatás ellenőrizhetősége.........1425.3.2. Aszinkron feldolgozás biztosítása.......1435.3.3. Karakterkódolás.................................... 143

5.4. Az alkalmazás éles üzembe helyezése.............. 160

Page 8: Androidos szoftverfejlesztés

6. Receptek haladóknak................................................ 1616.1. Háttérszín megváltoztatása............................ 1616.2. Betöltőkép megjelenítése................................... 1626.3.Statikus képek megjelenítése............................. 1646.4. Képemyő méreteinek lekérdezése................. 1656.5. Képernyőtájolás kezelése................................1666.6. TeIjesképernyős üzemmód.............................1676.7.SMS küldés kezdeményezése............................ 1686.8. Telefonhívás kezdeményezése.......................... 1696.9. Email küldés kezdeményezése.......................... 1706.10. URL megnyitásának kezdeményezése.........1716.11. Böngésző integrálása mobilalkalmazásba... 1726.12. Busy indicator használata............................ 1776.13. Hangfájlok lejátszása....................................178

7. Hogyan tovább?..........................................................179Függelék......................................................................... 180Ajánlott irodalom...........................................................192

Flex és Actionscript................................................... 192Androidos fejlesztés és dizájn..................................193Apache, MySQL és PHP........................................... 194

Webhelyek....................... 195játékfejlesztéshez...................................................... 196Teszteszközök Adobe AIR fejlesztésekhez..............197Angol nyelvű szakirodalom.................................... 197

8________________Androidos szoftverfejlesztés alapfokon

Page 9: Androidos szoftverfejlesztés

9I tőszó

Előszó

A mobileszközök térnyerését nem lehet nem észrevenni. Ismerős a kép: utazás közben az emberek szeretik mobileszközeikkel tölteni az időt. A jelenség általános és mára tömeges mé- retet öltött.

A könyv alapját egy előadás szolgáltatja, me- lyet a téma iránt mélyebben érdeklődő informa- tikusoknak tartott a szerző. Az előadás ötletét szintén a fenti megfigyelés adta. Az előadás címe ez volt: ״Androidos fejlesztés modern eszkö- zökkel". Az előadás anyagát felhasználva, azt jelentősen kibővítve született meg ez a könyv.

Kiknek szól ez a könyv?

A könyv teljesen kezdő és haladó fejlesztők- nek, informatikusoknak ajánlható, akik most ismerkednek a mobilfejlesztés világával. Az

Page 10: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon10

alapvető informatikai ismeretekre ugyan szűk- ség van, a mélyebb programozási ismeretek birtokában pedig gyorsabban haladhatunk, de ez nem feltétele a könyv ismeretanyagának a sikeres feldolgozásához, programozáshoz.

Miben történik a fejlesztés?A könyvben az Adobe AIR- és Apache Flex-

alapú mobilprogramozásról olvashatunk, mely- nek alapnyelve az ActionScript. A könyv bemu- tatja az Adobe Flash Builder fejlesztőeszközt és egy lehetséges megközelítési módját annak, hogy az AIR alkalmazások hogyan képesek ki- használni a PHP és a MySQL lehetőségeit.

Hazánkban alapvetően a Java-alapú fejlesz- téseket részesítik előnyben, így a mobilfejlesztés és az AIR kapcsolatáról méltánytalanul szinte semmilyen magyar nyelvű forrást nem találunk, noha az AIR segítségével kiváló mobilalkalma- zásokat készíthetünk Androidra, vagy akár iOS- re is.

Az ActionScript alapon végzett fejlesztés sok előnnyel jár. Gyorsan tanulható, lényegesen egyszerűbb a Java-alapú fejlesztésnél és univer- zálisabb tudást szerzünk, hiszen az ActionScript nem csupán mobilfejlesztésre használható, ha­

Page 11: Androidos szoftverfejlesztés

11Előszó

nem webes, vagy asztali alkalmazásokat is ugyanolyan könnyedén készíthetünk vele (az ugyanolyan itt szó szerint értendő). A készíthető alkalmazások minősége pedig semmiben sem marad el a Java-ban fejlesztett alkalmazásokétól.

A könyv felépítése

A könyv négy tematikus részre osztható: egy elméleti, egy az ActionScriptet és a Flex-et, és egy, a példaalkalmazások készítését bemutató gyakorlati blokkra, valamint zárásként egy kód- recept gyűjteményre.

Az első, elméleti rész azokat a szükséges is- mereteket tartalmazza, melyekre minimálisan szükség van az induláshoz és segítségükkel otthonosan mozoghatunk a témában.

A második részben az ActionScript és a Flex olyan szintű bemutatására törekszünk, melyek- kel a könyvben tárgyalt példaprogramok elké- szítése tökéletesen érthető, egyben biztos kiin- dulási alapot teremt a további fejlődéshez. Ezt hivatott segíteni a könyv végi irodalomjegyzék is, melyben csupa hasznos, valóban használható könyv listája található. A könyv példái a PHP szkripteket és MySQL lekérdezéseket is hasz- nálnak, ám a PHP és MySQL külön ismertetésé-

Page 12: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon12

tői - annak szerteágazó volta miatt - eltekin- tünk, cserébe viszont bőséges magyarázatokkal látunk el minden szkriptet. A könyv végén ta- lálható irodalomjegyzék tartalmaz több kiváló könyvet is, melyekkel elmélyedhetünk a PHP és a MySQL világában.

A harmadik, gyakorlati rész példaalkalmazá- sok elkészítését mutatja be, lépésről-lépésre. Először csak egyszerű, de azonnal futtatható alkalmazásokat készítünk, majd a könyv végére pedig egy PHP-n keresztül MySQL adatbázissal kommunikálni képes alkalmazást is készíteni fogunk. Egy adatbázissal kommunikáló mobil- alkalmazás megírásának képessége komoly és hasznos alkalmazások elkészítéséhez teremt megfelelő alapot, ezért lett a könyv célja ez. A fejezetekben számos tippet és trükköt is talál a Tisztelt Olvasó a PHP és a MySQL használatá- hoz, melyeknek mobilfejlesztésnél nagy hasznát vehetjük.

A negyedik, záró részben a megszerzett tu- dás további elmélyítésére inspiráló "instant" kódpéldákat találunk, melyekkel még sokolda- lúbbá tehetjük alkalmazásainkat.

Page 13: Androidos szoftverfejlesztés

13Előszó

A könyvben használt jelölések

A könyvben feliratok, elnevezések aposztró- fok közé téve jelennek meg (például: 'felirat'). A forráskódok, programozási nyelvek elemei más betűtípussal vannak szedve a jobb olvashatóság érdekében (például: forráskód).

Ahol lehetséges, a Flash Builder szintaktikai szövegkiemeléseit megtartottuk a könnyebb olvashatóság érdekében, esetenként a fontosabb kódrészleteket külön vastagon szedve kiemel- ten.

A könyvben közölt forráskódok sorait azok szélessége miatt tördelni kellett, esetenként erre ügyelni kell a kódok értelmezésekor, ill. begépe- lésekor.

A könyvben bemutatott kódok ill. projektek mindazonáltal kész formában is letölthetőek a kiadó honlapjáról. A projekteket egyszerűen beimportálhatjuk a Flash Builder-be.

A könyv legvégén ajánlott könyvek és web- helyek bőséges listája található, melyekkel to- vább bővíthetjük megszerzett ismereteinket.

Fedezzük hát fel az androidos fejlesztés vilá- gát!

Page 14: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon14

1. Felkészülés a fejlesztésre

1.1. Az Adobe AIR platformrólAz AIR az Adobe Integrated Runtime elne-

vezés rövidítése és egy olyan technológiát takar, mellyel Flash-alapú alkalmazásokat böngészőn kívül, az operációs rendszer natív alkalmazása- ként lehet futtatni. Ezzel a Flash rugalmasságát a natív alkalmazások előnyeivel (pl. hozzáférés a lokális erőforrásokhoz) lehet ötvözni.

A programozás során használt programozási nyelv, az ActionScript, ECMA szabványra épü- lő nyelv, akárcsak a Java. Az Actionscript lehe- tővé teszi, hogy a Flash példátlanul látványos multimédiás képességeit interaktivitással ru- házzuk fel.

Az AIR alkalmazások készítését külön SDK- val lehet elvégezni. Az AIR SDK ingyenesen letölthető az Adobe weboldaláról:

Page 15: Androidos szoftverfejlesztés

15Felkészülés a fejlesztésre

letölthető az Adobe weboldaláról: (http://www.adobe.com/devnet/air/air-sdk-download.html),ám leghatékonyabban valamilyen integrált fej- lesztői környezettel lehet kihasználni a techno- lógia összes képességét.

Az AIR fejlesztések páratlan előnye, hogy ugyanazzal a kódbázissal többféle platformra készíthetünk alkalmazásokat, a kód újraírása nélkül. így, aki megtanul AIR alkalmazásokat írni, ״egy csapásra" képes Windows, Mac OSX, Android, Blackberry, iOS, de még SmartTV rendszerekre is alkalmazásokat készíteni.

Az ActionScript-alapú fejlesztésekkel karölt- ve zajlott a Flex keretrendszer fejlesztése is. A Flex nem más, mint egy ActionScriptben megírt osztálygyűjtemény és architektúra, mely első- sorban az alkalmazások kezelőfelületének az elkészítésére használható. A Flex forráskódja XML alapú és nagyon könnyen olvasható. Az Adobe a Flex keretrendszer gondozását 2012- ben az Apache alapítványnak adta át.

Az AclionScript aktuális verziója ezen könyv megírásakor a 3.0-ás, a Flex-é 4.11.

Mobilalkalmazásokat Flex és tisztán Action- Script alapon, vagy keverten is fejleszthetünk. Ez utóbbi megoldást mutatja be a könyv is.

Page 16: Androidos szoftverfejlesztés

1.2,, Az Androidról és a statisztikákrólNaponta átlagosan 1 millió írj, Android-ot

futtató mobileszközt aktiválnak.Az Android egy UNIX alapokon nyugvó

operációs rendszer, lényegében a Linux egy változata. Natív programozási nyelve a Java. Az Android Inc.-t 2003-ban alapították, 2005- ben ezt vette meg a Google és az ún. Open Handset Alliance, mely számos vállalatot, köz- tűk sok telekommunikációs céget foglal magá- bán.

Az Android első kiadása 2007-ben jelent meg, de kereskedelmi forgalomban kapható mobileszközön 2008-ban volt először kapható.

Többféle verziójú Android található a forga- lomban levő mobileszközökön, a legelterjedteb- bek a 2.3, 4.0.x és 4.1.x verziók, durván egymás- hoz hasonló arányban. Az arányok természete- sen fokozatosan tolódnak az újabb verziók felé.

A legkedveltebbek a mobiltelefonok és a 7,5- 8 cm képátmérőjű, nagy pixelsűrűségű kijelzők- kel rendelkező eszközök.

Miért fontosak ezek az információk? A kö- vetkező fejezetből megtudjuk.

16______________ Androidos szoftverfejlesztés alapfokon

Page 17: Androidos szoftverfejlesztés

1.3. A mobilfejlesztés fő szempontjai

1.3.1. A mobilalkalmazásoknál a minőség kiemelt szempont

Az asztali számítógépek világban már szinte megszoktuk, hogy a szoftverek időről-időre -kifagynak" és a legkülönfélébb hibákat produ״kálják. Egy mobilalkalmazás esetében ez nem megengedhető. A felhasználók a hibás mobilal- kalmazásoktól rövid úton megszabadulnak és ezt joggal teszik: a kínálat bőséges, van miből válogatni.

1.3.2. A mobilvilág más

Ahogyan egy desktop alkalmazás és egy we- bes alkalmazás közé sem tehetünk egyenlőségje- let, ugyanúgy egy mobilalkalmazás elkészítése- kor sem járhatunk el egy az egyben úgy, mint egy webalkalmazásénál (pl. erőforrásokkal tör- ténő gazdálkodás).

1.3.3. Tudatosan kezeljük a jogosultságokat!

Az Android szigorúan szabályozott keretek között futtatja az alkalmazásokat. Ez több szín- ten is tetten érhető.

Felkészülés a fejlesztésre__________________________ 17_

Page 18: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon18

Alacsony szinten minden alkalmazáshoz egy virtuális gép rendelődik (a Dalvik), az Android virtuális gépe. Az alkalmazások nem kommu- nikálhatnak egymással közvetlenük hanem az operációs rendszer közvetítésével, üzenetek segítségével. Számos más tényező is a biztonsá- got hivatott növelni.

Az alkalmazások szintjén pedig az alkalma- zásnak előre tudatnia kell az operációs rend- szerrel, hogy a készülék mely funkcióihoz kíván hozzáférni, tipikusan ilyen például az internet- hozzáférés, a telefonhívások, a beépített kamera használata stb.

Az ökölszabály az, hogy csak olyan jogosult- ságokat igényeljen az alkalmazásunk, melyekre feltétlenül szüksége is van!

A túlzott és felesleges jogosultságigénylés hátulütője az, hogy a felhasználók annál bizal- matlanabbak egy alkalmazással szemben, minél több jogosultságot igényel az. (Ha egy sima já- ték hozzáférést akar például a telefonhívások- hoz, úgy az óvatosabb felhasználó gyanút fog, és nem telepíti azt.)

Page 19: Androidos szoftverfejlesztés

19Felkészülés a fejlesztésre

1.3.4. Ésszerű keretek között tartott kompatibilitás

Napjainkban egyfajta közmegegyezés van arról, hogy az Android 2.2/2.3-as verzióival ér- demes fenntartani a kompatibilitást. Java-alapú fejlesztések esetében ez inkább a 2.2-es verziót szokta jelenteni.

Adobe AIR esetében a 2.3-as verzióig visz- szamenően kompatibilis alkalmazásokat készít- hetünk.

Érdemes abból kiindulni, hogy milyen éssze- rű ráfordítás szükséges a kompatibilitás megőr- zéséhez. Nincs ez másként az asztali számitógé- pék világában sem. Ha túl alacsonyra tesszük a mércét, az felesleges költségeket és ráfordítást generál. Ha túl magasra, akkor potenciális fel- használóktól eshetünk el.

1.3.5. Takarékoskodni az erőforrásokkalA mobileszközök hardverei szédületes tem-

póban fejlődnek. Ma már a többmagos CPU-k és a nagy teljesítményű grafikus gyorsítók is átla- gosnak számítanak. Érdemes megjegyezni, hogy ez a fejlődés mennyire hasonlóan zajlik a desk- top világban végbemenő fejlődéshez és hogy a

Page 20: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon20

mobilvilágban ez a fejlődés sokkal rövidebb ciklusokkal megy végbe.

Talán hamarosan eljön a nap, amikor min- degy lesz, hogy egy okostelefont, vagy egy desktop PC-t fogunk használni internetezésre, vagy akár munkára is. A tejjel és mézzel folyó Kánaánra, amiben nem kell törődnünk a mobil- eszközök erőforrásainak kímélésével, azonban még várnunk kell és a jelenben igenis fontos, hogy a többnyire még mindig szerényebb telje- sítményű eszközökön is közel hasonló felhasz- nálói élményt nyújtson alkalmazásunk, mint egy erősebb hardverrel rendelkező eszközön.

1.3.6. Av7-esAz androidos eszközök ún. ARM processzo-

rókát használnak, amelyek RISC processzorok. Liszensz alapján több gyártó is készít ilyen CPU-kat. Ezek utasításszinten 100 százalékig kompatibilisek egymással. Az Adobe AIR al- kalmazások a v7-es utasításkészletű CPU-kkal kompatibilisek. A v7-es CPU-k már jó ideje bőséges számban jelen vannak a piacon és az új eszközökben is ilyeneket találunk. Mindazonál- tál rengeteg olyan - elsősorban régebben gyár- tott - készülék van forgalomban, amelyek pl.

Page 21: Androidos szoftverfejlesztés

21Felkészülés a fejlesztésre

v5-ös utasításkészletű CPU-val rendelkeznek. Erre oda kell figyelni.

1.3.7. A 3D-s megjelenítés mobileszközökön is lehetséges

A CPU-k fejlődése mellett a GPU-k is roha- mosan erősödnek a mobileszközökben. Ezek a grafikus gyorsítók fejlett OpenGL támogatással is rendelkezhetnek. Az Adobe AIR alkalmazá- sok teljes mértékben ki tudják aknázni a GPU- kban rejlő lehetőségeket.

1.3.8. Ez a RAM nem az a RAMA hirdetésekben gyakran találkozhatunk a

mobileszközök ״RAM" specifikációival, melyet hallva önkéntelenül is a desktop világban hasz- nálatos memóriamodulokra gondolunk.

Nos, a helyzet ennél bonyolultabb. A kétféle RAM elnevezés ugyanis más-más memóriatí- pust takar. A mobileszközök memóriája ugyanis Flash memória, amely megőrzi tartalmát áram- ellátás hiányában is. Hasonló memóriákat hasz- nálunk például digitális fényképezőgépekhez is.

Az androidos eszközök két memóriát hasz- nálnak. Egy ún. belső tárolót és egy külső táró- lót (mindkettő az eszközbe beépített memóriát

Page 22: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon22

takar). Utóbbi mérete általában többszöröse a belső tárolóénak. A dolgokat tovább bonyolítja, hogy a belső tároló különböző logikai egységek- re, ún. szegmensekre van osztva. A belső me- mória szegmensei hasonlatosak a desktop PC- kben használt merevlemezek partícióihoz. Rá- adásul a belső tároló is rendelkezhet külső táró- lónak nevezett szegmenssel. Ezeket a mobilesz- köz operációs rendszere és a telepített alkalma- zások használják és csak korlátozott mértékben, vagy egyáltalán nem hozzáférhetőek a felhasz- nálói programok számára.

1.3.9. Itt repül a kismadár!A mobileszközök a legtöbb esetben legalább

egy hátlap! kamerával rendelkeznek. Amennyi- ben előlap! kamera is van, annak felbontása általában lényegesen alacsonyabb a hátlapi ka- meráénál. A kamerák által produkált képminő- ség elég nagy szórást mutat, de azért többnyire sikerrel rögzíthetünk pár képet, a kamerák által látott és rögzített képet pedig felhasználhatjuk alkalmazásainkban.

Page 23: Androidos szoftverfejlesztés

23Felkészülés a fejlesztésre

1.3.10. Szenzorok:izgalmas technológiák egy helyen

Érintőképernyő: a legtriviálisabb kezelő- szerve az androidos készülékeknek maga a ki- jelző. Manapság már lehetséges több ujjal vég- zett érintések értelmezése is. (Valójában azon- bán a kétujjas érintéseket is inkább ritkábban használják a felhasználók.)

Gyorsulásmérő: segítségével a készülékek képesek megállapítani, hogy függőlegesen, vagy vízszintesen tartjuk-e őket, továbbá a mozgás irányát is képesek kiszámítani.

Irányérzékelő: ritkábban találkozhatunk ve- le. Segítségével a készülék képes felismerni, hogy melyik égtáj felé tartják.

(A-)GPS: Néhány kivételtől eltekintve, az androidos eszközökben található GPS-vevő nem azonos hardvert takar a hagyományos navigá- ciós eszközökben található hardverhez képest. Az ״A" az ״assisted" szó rövidítése és olyan technológiát takar, amellyel lényegesen egysze- rűbben megoldható a GPS-alapú helymeghatá- rozás azáltal, hogy a telekommunikációs szol- gáltatók hálózatukon keresztül biztosítanak olyan kiegészítő funkciókat, melyekkel a saját hely meghatározása és a GPS műholdak követé­

Page 24: Androidos szoftverfejlesztés

se megbízhatóan lehetséges szerényebb és ki- sebb fogyasztású GPS-hardverrel is. Ez egyben azt is jelenti, hogy aktív internetkapcsolat szűk- séges az A-GPS gördülékeny használatához. Ezt leszámítva azonban a helymeghatározás elérhe- tő minősége kiváló, néhány méteres pontosság is könnyen elérhető.

1.3.11. Akkumulátor: Bírni szusszal...A mobileszközök egyik legvonzóbb tulaj-

donsága maga a mobilitás. Nem helyhez kötőt- tele, hanem akkumulátorról is képesek üzemel- ni. Az akkumulátorok kapacitása viszont véges. Egy rosszul tervezett alkalmazás jóval nagyobb energiafogyasztást generál, mint egy hatéko- nyabban megírt. A helyzet ismerős lehet a note- book-ok világából.

1.3.12. FuIIHD-n innen és túl...A pixelsűrűség (DPI vagy PPI) a kijelzők

azon tulajdonsága, mely azt adja meg, hogy a képernyő egy 2,54cm széles képsora hány darab elemi képpontot, azaz pixelt tartalmaz. A 160-as DPI teljesen átlagosnak tekinthető, de 600 feletti DPI értékkel rendelkező kijelzők is léteznek. A sokféleség kavalkádjában a mobilalkalmazá­

24______________ Androidos szoftverfejlesztés alapfokon

Page 25: Androidos szoftverfejlesztés

25Felkészülés a fejlesztésre

soknak (legalábbis a jól megírtaknak) minden kijelzőn közel azonos módon kell tudniuk meg- jelenni. Nem triviális ugyanis, hogy például egy nyomógomb ugyanolyan méretben jelenik meg különböző tulajdonságokkal rendelkező kijei- zőkön.

Noha a FullHD-s kijelzők sem számítanak már ritkaságnak, még mindig rengeteg olyan készülék vásárolható ill. van forgalomban, me- lyek kijelzője csupán 320x240, vagy hasonló felbontással rendelkezik.

A megfelelő, felbontásfüggetlen képi megje- lenítés nagyon komoly kérdés.

Természetesen a képarányok tovább nehezí- tik a helyzetet. A megoldás fejlesztői szempont- ból mindig a gondos, előre elvégzett tervezés.

1.3.13. Képfeldolgozás: tárhely kontra sebesség

Az asztali gépek világából ismert dilemma a mobileszközöknél is felmerül. A fejlett GPU-k- nak köszönhetően ugyanis a képmegjelenítés- hez alkalmazási területtől függően választha- tünk vektoros megjelenítést, ami helytakarékos, de számításigényes, vagy bittérkép-alapú meg­

Page 26: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon26

jelenítést, ami ugyan kevés számítási kapacitást igényel, ellenben jóval tárhelyigényesebb.

1.3.14. Nagyfokú hibatűrésMobileszközöknél bizony könnyen előtör-

dúlhat, hogy a hálózati kapcsolat elvész. Ilyen esetekben - természetesen az adott alkalmazás- tói függően - akár az adatvesztés lehetőségével is szembe kell nézni, pontosabban ennek elkerít- lésére kell kidolgozni alkalmazásszintű stratégi- át.

Az adatvesztés elkerülése mellett az alkal- mazásoknak egészen egyszerűen azzal a hely- zettel is kell tudniuk kezdeni valamit, hogy el- vész a kapcsolat és újra ״ fel kell tudniuk venni a fonalat", ha a kapcsolat helyreáll.

1.3.15. A teljesítménytervezés lehetőségei

Gyakran olvashatunk teljesítménytesztekről, melyek a mobileszközök megjelenítési képessé- geit mérik. Ezek a kétségkívül hasznos mérések azonban közel sem mutatnak teljes képet egy eszköz teljesítményéről. Léteznek más típusú tesztek is, melyek szintén nagyon fontos infor- mációkkal szolgálhatnak fejlesztők számára.

Page 27: Androidos szoftverfejlesztés

27Felkészülés a fejlesztésre

Ezek a tesztek a háttértárra történő írás, sztringműveletek sebességét és más hasonlókat mérnek. Ezek egy részét a Flash Builder is tar- talmazza, de rengeteg harmadik fél által készí- tett lehetőség is rendelkezésre áll. A függelék- ben több ilyen teszteszköz elérhetőségét is meg- találjuk.

1.4. Mire lesz szükségünk?A modern alkalmazások legtöbbje nem csak

úgy önmagában működik, hanem nagy meny- nyiségű lokális és/vagy hálózati erőforrásokon található adatot dolgoz fel.

Tekintsük át, hogy a könyv ismeretanyagá- nak tárgyalása során milyen megoldásokat használunk majd arra, hogy példaalkalmazása- ink számára adatokat szolgáltassunk és feldől- gozhassuk azokat!

1.5. MySQLNapjainkban az ún. relációs adatbázisok

dominanciája az adatfeldolgozásban vitán felül áll. Az adatszolgáltatás az adatokat feldolgozó alkalmazások szemszögéből úgy működik, hogy egy alkalmazás egy távoli szerveren futó

Page 28: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon28

adatbázis-kiszolgálóalkalmazáshoz küld kóré- seket, amely azokat végrehajtja és a kérések alapján rendelkezésre bocsájtja a kért adatokat. A kiszolgáló fejlesztői szemmel nézve lehet egy lokálisan futó natív alkalmazás, egy böngésző- ben futó alkalmazás, vagy éppenséggel egy mo- bilalkalmazás is. Könyvünk példái során az ingyenes verzióval is rendelkező MySQL szer- vert fogjuk használni Windows környezetben.

A MySQL-t parancssorból is használhatjuk, de különböző (szintén ingyenes) segédprogra- mokkái rendkívül könnyedén elvégezhetünk komplex adminisztrációs és konfigurációs fela- datokat.a

Page 29: Androidos szoftverfejlesztés

29Felkészülés a fejlesztésre

1,6. PHP és ApacheAz adatok tárolásának a módja tehát már

megvan. De hogyan férünk hozzá az adatok- hoz?

Távoli adatbázisban tárolt adatokhoz mobil- eszközről közvetlenül nem tudunk hozzáférni, ezért egy közvetítő rétegre lesz szükségünk, mely kommunikálni tud az adatbázissal és az alkalmazásunkkal is. Erre a PHP-t, 111. a PHP szkriptnyelvet fogjuk használni.

A MySQL szerverhez hasonlóan a PHP-t is a kiszolgálói oldalon kell telepíteni és beállítani. A kéréseket a szerveren elhelyezett szkriptek hívásával bonyolítjuk le és szintén ezek a szkriptek szolgáltatják majd mobilalkalmazá- sunk számára az adatokat. A kétirányú kom- munikáció képessége nagyon fontos: tudnunk kell adatokat küldeni és fogadni is.

Ahhoz azonban, hogy a szerver a PHP- szkripteket fel is tudja dolgozni, szükség lesz egy ún. http-, vagy webszerverre, ami lényegé- ben egy távoli gépen futó kiszolgálóprogram és a PHP szkriptek futtatását képes elvégezni al- kalmazásunk számára. Az egyik legjobb megöl- dás erre a szintén ingyenes Apache kiszolgáló.

Page 30: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon30

Az alábbi képen a 4.3.11-es PHP-t kezelő on- line 2.0.65-ös verziójú Apache szerver monito- rozó ablaka látható.

:. Service SlQtus:

—.■־־־-.־ :

Stop |

Boston |

______ _____________________ ■..... __ __ ____________ Services j ־ £onnect [

Fxii JjA e«he/20’6S (W.1132) PIIP/4.3.11

A MySQL, PHP és Apache telepítésére és megfelelő konfigurálására könyvünk nem tér ki, a könyv végén található irodalomjegyzékben azonban több, a konfigurálást részletesen is bemutató hazai könyv adatait is megtaláljuk.

Néhány jótanácsot azonban mindenképpen fontosnak tartunk megemlíteni.

1.6.1. VerziódzsungelMindhárom fent említett szoftverből többféle

verzió is létezik, ám nem mindegyik képes együttműködni a másik kettővel. Ezért konzek- vensen korábbi, vagy újabb verziókat érdemes

Page 31: Androidos szoftverfejlesztés

31Felkészülés a fejlesztésre

használni. Felmerülhet a kérdés: ״Hogyan jöhet egyáltalán szóba korábbi verzió?" A válasz attól függ, hogy az adatbázisszervert mi magunk akarjuk-e üzemeltetni, vagy ezt külső szolgálta- tóra bízzuk.

Amennyiben a fejlesztés alatt és az üzemelte- tés során is mi biztosítjuk a szervert, érdemes a legújabb verziókat használni.

Külső szolgáltató kész megoldásának igény- bevételekor már más a helyzet. Több hazai tárhelyszolgáltató ugyanis például a PHP 4.x verzióját használja és a MySQL szerverből sem a legújabbal. Amennyiben ez utóbbi megoldás mellett döntünk, akkor a fejlesztés során figye- lembe kell vennünk a szolgáltató oldalán üze- mehetett verziókat.

Külső szolgáltatónál arra is van lehetőség, hogy a szerver felépítését mi vegyük át.

Nagyon fontos: egyes tárhelyszolgál tatók korlátozhatják, szabályokhoz köthetik a szervereiken tárolt adatok, szkriptek stb. hozzáférésének, végrehajtásának lehetőségeit. Külső szolgáltató szolgáltatásainak igénybe- vétele előtt ezért mindig tájékozódjunk a lehetőségekről!

Page 32: Androidos szoftverfejlesztés

Ökölszabályként leszögezhetjük: lehetősége- ink és igényeink függvényében mindig a lehető legújabb verziókat használjuk!

Könyvünk példáinál a MySQL 5.2-es, az Apache 2.0.65-ös és a PHP 4.3.11-es, verzióit fogjuk használni. Ezek a verziók egyfajta arany középútként jól lefedik a hazai ingyenes tárhely- szolgáltatóknál elérhető kiszolgálók szoftver- környezetét.

1.6.2, Üzembehelyezés

1.6.2.1. Hová rakjuk a szkriptjeinket?Az Apache szerver alapértelmezett mappája

Microsoft Windows operációs rendszeren a kö- vetkező szokott lenni:C:\Program Files (x86)\Apache Group\Apache2\htdocs

Ez azt jelenti, hogy itt kell elhelyeznünk a PHP szkriptjeinket.

1.6.2.2. A PHP visszavágA PHP 4.x-es verzióinak egy sajátosságára

szeretnénk felhívni a figyelmet Windows operá- ciós rendszereken. A PHP hibátlan konfiguráció esetén sem hajlandó adatbázist kezelni, amíg végre nem hajtjuk az alábbi SQL parancsot, az

32______________ Androidos szoftverfejlesztés alapfokon

Page 33: Androidos szoftverfejlesztés

33Felkészülés a fejlesztésre

idézőjelek közé behelyettesítve a megfelelő ada- tokát: ezzel lényegében egy jelszó-visszaállítást végzünk el, (megadhatjuk régi jelszavunkat is).

SET PASSWORD FÓR üsernarne'@'hostname' = OLD_PASSWORD('password');

1.6.3. A PHP és a MySQL teszteléseJó gyakorlat, ha a fejlesztőkörnyezetünkre is

feltelepítjük a fentebb említett szerveralkalma- zásokat, így egy tesztkörnyezetet kapunk. Egy helyi tesztkiszolgálóval gyorsan és kényelmesen dolgozhatunk a fejlesztés során.

Feltételezem, hogy ezen a ponton már fel van telepítve és konfigurálva van mind a MySQl, mind a PHP, mind pedig az Apache szerver.

Teszteljük le először, hogy tudunk-e PHP-t futtatni! Ehhez hozzunk létre egy formázatlan szövegfájlt teszt_PHP.php néven és mentsünk el az Apache webmappájába, azaz ide:C:\Program Files (x86)\Apache Group\Apache2\htdocs

Figyelem: Ehhez a művelethez Windows Vista-tól felfelé rendszergazdai jogosultság szükséges, mivel egy rendszermappa tartalmát módosítjuk!

Page 34: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon34

A teszt_PHP.php PHP szkriptünk tartalma a következő legyen:

<?phpprint("Működika PHP.");?>

Nyissunk meg egy böngészőt és gépeljük be a következőt: http://localhost/teszt.php

Nyomjunk ENTER-t és a ״ Működik a PHP." szövegnek kell megjelennie a böngészőben. Ha nem jelenik meg semmi, vagy hibaüzenettel szembesülünk, akkor ellenőrizzük, hogy a szkriptet helyesen gépeltük-e be, ül. az Apache szervermonitor címsorában megjelenik-e a RHP verziója, stb.

Második tesztként ellenőrizzük, hogy hozzá- fériink-e PHP szkriptjeinkkel a MySQL adat- bázisainkhoz!

A MySQL alapesetben telepít egy ,test' elne- vezésű adatbázist, most ezt fogjuk használni. Amennyiben nincs ilyen adatbázisunk, könnye- dén létrehozhatunk egyet aCREATE DATABASE név;

mysql paranccsal.A szerveren található adatbázisokat a mysql

parancssori használatakor a

Page 35: Androidos szoftverfejlesztés

35Felkészülés a fejlesztésre

SHOW DATABASES;

paranccsal listáztathatjuk ki.Most hozzunk létre ismét egy formázatlan

szövegfájlt teszt_DB.php néven és mentsük el az Apache webmappájába!A szkript tartalm a ez legyen:

<?phpif (l$kapcsolat = @mysql_connect('localhost', 'username', 'password')){die(print("Hiba!"));}if(!mysql_select_db('test',$kapcsolat}){die(print("Hiba!"));} mysql_close($kapcsolat); print("Adatabázis elérhető.");?>

A szkript létrehozza a kapcsolatot a MySQL szerverrel és kiválaszt egy adatbázist (a példá- bán a 'test' nevűt), majd lezárja a kapcsolatot. Hiba esetén a szkript kiíratja a ״ Hiba!" szöveget és befejezi a futást.

Ha mindent jól csináltunk, a böngészőbe be- írva az alábbi címethttp://localhost/teszt_DB.php

az ״Adatbázis elérhető." szöveget kell látnunk.

Page 36: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon36

Ha nem várt eredményt kapunk, ne kesered- jünk el, ellenőrizzük ismét, hogy nem gépel- tünk-e el valamit, ill. helyes-e a rendszer konfi- gurációja!

Tekintsük át rendszerünk kommunikációs rétegeit!

í ץ ( N f \

PHP Apaclie MySQLszerver szerver

V........... ) V J V J

Távoli adatbázis-eléréshez tehát szükség van egy közvetítőrétegre (jelen esetben PHP) és egy webszerverre.

Ezzel a fejlesztéshez és teszteléshez szüksé- ges környezetet felépítettük.

1.7. FejlesztőeszközEgy nagyon fontos összetevő még hátravan:

a fejlesztőrendszer. Könyvünk az Adobe Flash Builder integrált fejlesztőkörnyezet használatát mutatja be a mobilalkalmazások fejlesztéséhez. A fejlesztőeszköz bemutatásáról szól a követke- ző fejezet.

Page 37: Androidos szoftverfejlesztés

37A Flash Builder

2. A Flash Builder

2.1. A Flash B u ild e r és a mobilvilágAz ActionScript-alapú fejlesztőeszközök két

vezető eszköze az Adobe Flash Builder és az Adobe Flash Professional. Előbbi egy Eclipse- alapú, komplett fejlesztőrendszer, utóbbi pedig egy erősen dizájnszemléletű, szintén nagyon hatékony fejlesztőeszköz. Könyvünk példáiban a Flash Builder-t fogjuk használni. (Mindkét eszköz fizetős, liszenszköteles szoftver, de lehe- tőség van néhány napos próbára is.)

A Flash Buildernek jelenleg a következő ver- ziói kaphatóak:• Flash Builder 4.7 Standard• Flash Builder 4.7 Prémium• Flash Builder 4.5 fór PHP Standard• Flash Builder 4.5 fór PHP Prémium

Page 38: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon38

Könyvünkben a Flash Builder 4.7 Standard verziójával fogunk dolgozni.

A Flash Builder-rel robusztus, nagy teljesít- ményű üzleti alkalmazásokat, professzionális weblapokat, vagy akár játékokat is fejleszthe- tünk, több más programozási nyelvet és szer- veroldali technológiák széles palettáját felhasz- nálhatjuk a fejlesztéseinkhez, köztük a PHP technológiát is.

2.2. A Flash Builder telepítéseA Flash Builder rendszerkövetelményei:

Windows2GI־tz-es vagy gyorsabb processzorMicrosoft® Windows® XP Service Pack 3, Win-dows 7 (32 bit vagy 64 bit), Windows 8

Page 39: Androidos szoftverfejlesztés

39A Flash Builder

2GB RAM 5GB HDDJava™ Virtual Machine (32 bit): Oracle® JRE 1.6 vagy 1.7Java Virtual Machine (64 bit): Oracle JRE 1.6 vagy 1.7 1024x768-as felbontású kijelző (1280x800 ajánlott) 16-bites videokártyaEclipse™ 3.7 vagy Eclipse 4.2 (a plug-inként történő telepétshez)

MacIntel® processorMac OS X vl0.6, vl0.7, vagy vl0.8 2GB RAM 4GB HDDJava Virtual Machine (64 bit): JRE 1.6 1024x768-as felbontású kijelző (1280x800 ajánlott) 16-bites videokártyaEclipse 3.7 vagy Eclipse 4.2 Cocoa version (a plug- inként történő telepítéshez)

A Flash Builder kétféleképpen telepíthető: önálló alkalmazásként, vagy Eclipse plug- inként. Utóbbi esetben a következő Eclipse disztribúciók támogatottak: Eclipse IDE fór Java EE developers, Eclipse IDE fór Java developers, Eclipse Classic, and Eclipse fór PHP developers.

Az önálló alkalmazásként történő telepítés mindent tartalmaz és gyakorlatilag néhány kát- tintásból áll. A telepítő 32 és 64 bites változa­

Page 40: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon40

tokban is elérhető, a könyvben a 64 bites Win- dows változatot fogjuk használni, önálló alkal- mazásként telepítve. A telepítő magyar nyelven is tud kommunikálni.

A telepítés a szükséges fájlok automatikus kicsomagolásával kezdődik.

Következő lépésként a telepítő inicializálásá- ra kerül sor.

! 111 Adobe telepítő ......................... i g g

Atelepitö Inlcl3ll2áláea

| .....................................................־1 ® Í S I S I I S I

Page 41: Androidos szoftverfejlesztés

41A Flash Builder

Ezt követően választhatunk, hogy csak ki- próbáljuk-e a terméket néhány nap erejéig, vagy végleges (ez utóbbi telepítési módot mutatja be a könyv is) használatra telepítjük. Ez utóbbi esetben elő kell készítenünk a megvásárolt tér- mékhez kapott sorozatszámot is.

Adobe Flash Builder

Üdvözöljük!

TelepítésRendelkezem sorozatszámmal.

KipróbálásKorlátozott ideig ki szerelném próbálni a kővetkezőt: Adobe Flash Builder.

Következő lépésként el kell fogadnunk az Adobe szoftverlicenc-szerződését.

Page 42: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon4 2

föl Adobe Flash Builder - ° 1BÜ

Adobe szoftverlicenc-szerződésMagyar v

ADOBE

SioMveilidwnüd(! izerzLidéi

KÉMÜK OLVASSA EL FIGYELMESEN EZT A SZERZŐDÉST. A SZOFTVER EGÉSZÉNEK VAGY EGY RÉSZÉNEK MÁSOLÁSÁVAL, TELEPÍTÉSÉVEL VAGY HASZNÁLATÁVAL ÖN (TOVÁBBIAKBAN ,VÁSÁRLÓ־) ELFOGADJA A JELEN SZERZŐDÉSBEN FOGLALT ÖSSZES FELTÉTELT, KORLÁTOZÁS NÉLKÜL IDEÉRTVE A A. PONTBAN FOGLALT LICENCMEGSZORlTÁSOKAT, A 6 ÉS 7. PONTBAN FOGLALT SZAVATOSSÁGKORLÁTOZÁST, A D. PONTBAN FOGLALT FELELŐSSÉGKORLÁTOZAST, VALAMINT A 16. PONTBAN FOGLALT KÜLÖNLEGES RENDELKEZÉSEKET ÉS KIVÉTELEKET. A VÁSÁRLÓ ELFOGADJA, HOGY A JELEN MEGÁLLAPODÁS EGYENÉRTÉKŰ BÁf<MILYEN ÍRÁSBA FOGLALT, MEGTÁRGYALT, A VÁSÁRLÓ ÁLTAL SZEMÉLYESEN Al ÁllLT SZERZŐDÉSSEL. JELEN SZERZŐDÉS ÉRVÉNYESÍTHETŐ A VÁSÁRLÓVAL SZEMBEN. AMENNYIBEN A VÁSÁRLÓ NEM ÉRT EGYETA SZERZŐDÉS FELTÉTELEIVEL, NEM HASZNÁLHATJA A SZOFTVERT,

Amennyiben a Vásárló az Adobe hal közvetlenül mis írásbeli szerződést is kötött (pl. kötetfelhasználói szerződést), az ilyen szerződés kiegészíti a jelen szerződést, illetve a jelen szerződés teljes egészének vagy egyes részeinek a helyébe lép. A szerződés a Szoftverre HÁSZNÁLATI ENGEDÉLYT ad, mely csak a jelen szerződésfeltételeinek betartása esetén érvényes. A VÁSÁRLÓ NEM VÁLIK A SZOFTVER TULAJDONOSÁVÁ A Szoftverben foglalt vagy azon keresztül elért

| E lfogadó!:

Ezt követően meg kell adnunk a termék egyedi sorozatszámát. Mielőtt a 'Tovább' gomb- ra kattintanánk, ellenőrizzük, hogy aktív inter- netkapcsolattal rendelkezünk-e, mert a telepítő interneten keresztül aktiválni fogja Flash Builder példányunkat! A tényleges telepítés addig nem kezdődik el, amíg ez nem történik meg.

Page 43: Androidos szoftverfejlesztés

43A Flash Builder

Ezt követően a telepítő felhívja a figyelmet arra, hogy utolsó lépésként meg kell adnunk az Adobe Creative Cloud fiókunk adatait. Ne ag- gódjunk, ha még nincs ilyen fiókunk. Az Adobe weboldala mellett a telepítővel is létrehozha- tünk egyet.ÜSS Adobe Flash Builder —

MBejelentkezés szükségesA(z) Adobe Flash Builder 4.7 Standard termék sorozaszámának érvényesítése megtörtént

Bejelentkezés szükséges a termék telepítéséhez és az ón Adobe azonosítójával való regisztrálásához. Adobe azonosítójának használatával egyszerűen elérheti sorozatszámait valamint az Adobe Creative Cloud rendszert és azAdobe.com/hu közösséget.

Bejelentkezés mostVisszaBejelentkezés később.

Page 44: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon4 4

A bejelentkezés gyors, egyszeri és nem igé- nyel további felhasználói interakciót a későbbi- ekben.

a

BejelentkezésBe kell jelentkeznie Adobe azonosítójával.

Arlnbn a/onodtó (0 m ail dm )

Adobe azonosító létrehozása

Hitelesíts adatart a rendszer 01 íojja tárolja ezen az eszközön

Problémái vannak a bejelentkezéssel5

A telepítés következő lépésének beállításait nyugodtan hagyhatjuk az alapértékeken.

Adobe Flash Butidét

Page 45: Androidos szoftverfejlesztés

45A Flash Builder

A telepítés folyamata kb. 15-20 percnél nem tart tovább.

TelepítésJelenleg a(z) A d o b e Flash B u ilder te lepítése van fo lya m atb an

δ .......................K2. 'í■ p e c (■ % kísz)

a A d o b e F l a s h B u i l d e r — 9 ■ ‘ ׳ ׳ ^ ׳ ■

A t e l e p í t é s b e f e j e z ő d ö t t .Ezek az ־alkalmazások készen :állnak a használata

6 8fi szoftver vagy az eqyét eredeti Adobe szoítveiak kezeléséhez keresse* fel a következő webhelyei:f1tts://ww׳.adobs com/g V 3 c 01; emembe re h1p_n!,

S .3 j á r terméktámogatás | i d e á s 0 k: atóer-yegok

: Bezárási

Page 46: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon46

Immár rendelkezésünkre áll egy komplett androidos fejlesztőrendszer! A Flash Buildert az alábbi ikonnal indíthatjuk el.

2.3. A Flash Builder kezelőfelületeA Flash Builder az alábbi képernyővel indul:

8ií'l* t»l ti«·'»*'· ·'»״״ 11.1.1· 1 Int» Hullait Wrlmmr S1 m · Il.nt1 Uullrim — Π UjJJJJj U»|« fc* vroww ü· r . Λ'0**‘.!.V. ,.. י.״״ י · *;·«a

. . . f , 1 , ........ ■ ...........................»14.

í?|5ΞΤ Jg Ξ׳ Ξ “

r:: ״ ^ ..״־״ ■״:*!.':בל י —S (״ ״ · . ן ״ · .« — * r. ■1 r ...

Az IDE fő részei a következők:Menüsor és ikonsor (1.) a leggyakoribb mű-

veletek gyors eléréséhez.

Page 47: Androidos szoftverfejlesztés

47A Flash Builder

Nézetek (2.). A Flash Builder két legfonto- sabb nézete a Flash és a Flash Debug, mi az előbbivel foglalkozunk majd. Egy nézet nem más, mint a szerkesztőablakok elrendezése. Ezeket az ablakokat a Flash Builder ״ view"- knak, a nézeteket pedig ״ perspective"-nek ne- vezh A nézetek ablakainak méretét és elrende- zését tetszőlegesen módosíthatjuk, akár több ablakot is megnyithatunk, ilyenkor átlapolt el- rendezésben jelennek meg az ablakok és fülek- kel válthatunk közöttük. Ha egy View fülére duplán kattintunk, akkor a Flash Builder ikon- sor alatti részét az adott View fogja teljesen ki- tölteni. Ha még egyszer duplán kattintunk a fülön, visszaáll az előző méret.

Szerkesztőterület (3.) (״ editor"-ok): Ebben az ablakban szerkeszthetjük alkalmazásunk forráskódjait és itt jelenik meg a kódellenőrzés, a fordítás, illetve a Debug futtatás kimenete is. Szintén itt található az alkalmazás indításakor automatikusan betöltődő 'Welcome Screen' is, ahonnan közvetlenül is létrehozhatunk, vagy megnyithatunk projekteket és számos online információforráshoz is hozzáférhetünk.

Package Explore (4.): ebben az ablakban pro- jektjeink jelennek meg. Egy projekttérhez

Page 48: Androidos szoftverfejlesztés

több projekt is tartozhat. A ("workspace״)workspace tulajdonképpen egy komplex map- pastruktúra, melyben a projektjeink almap- pákba rendezve vannak tárolva. Egy új projekt tehát a workspace egy almappájába lesz el- mentve és ez jelenik majd meg a Package Explo- rer-ben is. A Package Explorer-ben lényegében ezeknek a mappáknak a tartalmát láthatjuk, egy hierarchikus struktúrába rendezve. Tetszőleges Workspace-t létrehozhatunk, de egyszerre min- dig csak egy lehet megnyitva. A könyv példái- hoz a 'FlashJWP' nevű könyvtárat fogjuk hasz- nálni a workspace tárolásához. A Flash Builder alapértelmezés szerint a Windows aktuális fel- használójának dokumentum mappái között hoz létre egy workspace mappát és ennek egy-egy almappájában a fejlesztett alkalmazás Debug verzióját és a telepítőkészletét (lásd 2.7 és 2.8 fejezeteket). A workspace-ek között a 'Fiié' me- nü 'Switch Workspace' menüpontjával tudunk váltani, ez a Flash Builder újraindítását igényel- heti. Ha egy Workspace-en belül egy projekttel nem dolgozunk aktívan, erőforráskímélés végett bezárhatjuk azt. Ehhez kattintsunk a jobb egér- gombbal a Package Explorerben a projekt névé- re és a helyi menüből válasszuk ki a 'Close pro-

4 8 _____________ Androidos szoftverfejlesztés alapfokon

Page 49: Androidos szoftverfejlesztés

49A Flash Builder

ject' menüpontot. A projekt ikonja bezárt álla- pótban kiszürkített. Bezárt projektet úgy tudunk leggyorsabban újra megnyitni, hogy duplán kattintunk a nevére. A workspace könyvtárak gyökerében létrejön egy '.metadata' nevű könyvtárt is, mely a Workspace-ről tárol külön- féle leíró adatokat és a Flash Builder kezeli. So- ha ne töröljük, vagy módosítsuk kézzel ezt a könyvtárat!

Az Outline (5.) nevű ablak az aktuálisan szerkesztett forrásfájl objektumait jeleníti meg. Itt most csak a rend kedvéért említjük meg, a könyvben a későbbiekben nem fogjuk használ- ni.

2.4. Az első mobilprojekt létrehozása

A Flash Builder alapvető funkcióinak mé- lyebb megismerése érdekében hozzunk létre egy mobilprojektet!

Kattintsunk a Fiié menü New, majd 'Flex Mobile Project' pontjára!

Page 50: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon50

t ! Flex Project

: Flex Mobile Project, "R í U ül I Pt "ject

fül ActionScript Mobile Project tn Flash Professional Project Γίί Project״.

ü l MXML Application

A megjelenő varázsló párbeszédablakában több lépésben be kell állítanunk új projektünk alapvető tulajdonságait. A 'Project Location' lapon először is nevet kell adnunk projektünk- nek, illetve kiválaszthatunk egy tetszőleges Flex SDK-t. A példaprojeklnek a ,Példái' nevet ad- tűk.

Page 51: Androidos szoftverfejlesztés

51A Flash Builder

2.4.1. Pár szó a Flex SDK-rólA Flex SDK tulajdonképpen nem más, mint

egy könyvtár a számítógépen, mely számos, a fejlesztéshez használható komponenst tártál-máz.

Az aktuális SDK-t az Apache Foundation weboldaláról tölthetjük le (http://flex.apache.org). Szintén innen letölthetünk egy ún. SDK Mana- ger nevű segédprogramot, aminek a segítségé- vei igényeinkhez szabottan, egy lépésben letölt- hetjük a legújabb SDK-t.

ט

lypo fiUcr toxt j

Preferences (Filtered)

tiisl illril Fitt* SDK■'־■.

Flash BuilderInstalled Flex SDK* :

Add,romove, or edit Flex SDK defmiüons.Ilié (hccked SDK will be used fór Flex projects that don't spectfy an SDK version.

1 .Instdled SOKs:

Namc locationΠ *Flex 3.6A CAProgram f iles (x86)\Adobe\Adobe Flash Builríei ■4 6\tt*s\3.6.0 M *Flex 4 60 CVPiogram Fiié* (x86)\Adooe\Adobe Flash B u t id é 6 ׳ 4 \sdks\4 6 0

Add.

Üem-...-*

>/ Ask wmch SDK to use when importing pro|e<ts from older version* 01 Flash Bmider

Rését SDK l«st App'y

(?) OK Cantei

..1

Page 52: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon52

Az imént ismertetett párbeszédablakban a ,Configure Flex SDKs' hivatkozásra kattintva adhatunk meg további SDK elérési útvonalakat a rendszerünkben. A 3.6-os és a 4.6-os SDK-k automatikusan feltelepülnek a Flash Builder rendszerünkkel. A könyv írásakor legfrissebb SDK a 4.11-es.

Térjünk vissza a ,New Flex Mobile Project' párbeszédablakhoz és kattintsunk a 'Next' gombra!

DB New Flex Mobile Project - n ÜÜ3Ü9

CrnulH u FIhx M u liiln AIR P ro je c t I^FtgjÉ

| Choose target platformé a layout, and the pormlssl'oris fór your mobile application. ׳ ׳ H

i TP ,i ,7c»íő(7ni.:.n Χ 7 μ »Ι>Ι1» ¥ π Φ> ,י '4׳‘׳ י ו ״׳ ״׳ .i9 ״ s 3uilct Paihs 7 ________ _ ]

Target platforms

□ toppig iös) !yflöoog lo Android

Application Template Permissiom { Platform Settmgs

a m XE39NNK3

m | lVicw-Based Application Tabbed Application

Application settings

fyjAutomatically reanent [” 'j Full 5creen|!<| Automatlcally stale application fór dífferent screon densities ffsarn morc,.,!

Application DPI: 160 dpi v

(3) < 3ac< |j blext > j £ini<h Cancel

Page 53: Androidos szoftverfejlesztés

_ 53A Flash Builder

A ״Mobile settings" lapon a célplatform alapvető tulajdonságait adhatjuk meg projek- tünk számára. Példánkban egyedül a ,Google Android'-ot válasszuk ki!

Az 'Application Template' fülön válasszuk a 'Blank' sablont, amivel egy teljesen üres felüle- ten, ״nulláról indulva" építhetünk fel alkalma- zásfelületeket. (A másik két lehetőséggel, a View-alapú és a Tab-alapú alkalmazásfelületek- kel a könyv nem foglalkozik.)

A Termissions' fülre kattintva megadhatjuk, hogy alkalmazásunk milyen jogosultságokat igényel, azaz az adott mobileszköz mely szol- gáltatásaira tart igényt.

A p p l i c a t i o n T e m p i a t * I V r r a « ! 0 f 4 P l a í f o t m S í t t w g s P l a t f o r m : G o o g l c A w í l r o i d v

r 01 ‘,f ' , ΐ ΐ

V I N T E R N E TΓ j WRITEJXT£RNAL.STORAG£f R Í A D . P H O t í . S T A T E

A jogosultságokat az Android nagyon komo- lyan veszi. Amennyiben a megfelelő jogosultság nincs beállítva, úgy a kész alkalmazás akkor

Page 54: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon54

sem fog tudni hozzáférni az adott szolgáltatás- hoz, ha maga a forráskód hibátlan!

Az egyes jogosultságok jelentése:INTERNET: internet-hozzáférés engedélyezése.

(AIR alkalmazások esetében kötelező beállí- tani.)

WRITE_EXTERNAL_STORAGE: hozzáférés a készülékek írható memóriájához, mint fájl- rendszerhez.

READ_PHONE_STATE: a telefon állapotának lekérdezése.

ACCESS_FINEJLOCATION: hozzáférés a GPS helymeghatározás által szolgáltatott adatok- hoz.

DISABLEJKEYGUARD, WAKE_LOCK: a ké- szülék zárolt állapotának kezelése.

CAMERA: hozzáférés a beépített kamerához. RECORD_AUDIO: hangfelvételi szolgáltatás

igénybevételéhez.ACCESS_NETW ORK_ST ATE, ACCESS_WIFI_STATE: a hálózati kapcsolat

állapotának a lekérdezéséhez.

A 'Platform Settings' fülön nincsenek további beállítási lehetőségek Android esetében.

Page 55: Androidos szoftverfejlesztés

55A Flash Builder

A p f í t c a S i ö f t T e m p i a l e j Ρ * Π Μ ί » 0ί κ W í t f ö f f n S e - K i i S j * · Pveifwwi; (Soogle v

T h e « a r e n o j ^ a í t o m * s p é c i i k s í S f i n g s í w t h s s p l a t f o ! m

A párbeszédablak alsó részén, az ״Appli- cation Settings" alatt további beállításokat esz- közölhetünk.

'Automatically reorient': bekapcsolva az al- kalmazás külön kód írása nélkül is automatiku- san megpróbálja áthelyezni a GUI elemeit, ha elforgatjuk a készüléket.

'Automatically scale application fór different screen densities': bekapcsolva a különböző DPI- vei rendelkező kijelzőknél a megjelenítés autó- matikusan idomul a készülék aktuális DPI- jéhez. Kiválaszthatjuk a viszonyítási DPI értéket is. Az alapérték 160.

'Full screen': kiválasztva a képernyő alján ta- lálható szoftveres 'Home', 'Back' stb. gombok is takarásba kerülnek alkalmazásunk felületének

Page 56: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon56

javára. Csak nyomós okból érdemes beállítani (pl. teljes képernyős játékok esetében).

A 'Next' gombra kattintva a ,Server settings' lapra jutunk és szervertechnológiák közül vá- laszthatunk. A későbbiekben külön kitérünk erre a beállításcsoportra (lásd 5.3 fejezetet).

New Flex Mobile ProjedaC o n fíg u ro S o rv a r S o ttin g s

Configure the server technology and options, if any, and the location where Flash Builder should output your compiled application,

Bulid Paths[ Projed Location ~ Mobílg S^ lÍi^T j Server Sotti

Server technology

Application server type:; None/Other v :

I N/ lJse pítnotit pbject ncces׳; service

׳Qata St?tyl«8 ׳' ';!BlazeDS

' Col (!tusion Flash Remotlny

^ Leóm more about configuring a Flex project to

Compiled Flex application location This folder will be inside your project folder.

Qutput folder. | bm־debug

Φ

Első példaalkalmazásunk esetében nyűgöd- tan hagyhatjuk a szervertípust ,None/Other' értéken.

Page 57: Androidos szoftverfejlesztés

57A Flash Builder

A 'Next' gombra kattintva az utolsó, ,Build Path' lap jelenik meg, ahol fordítással kapcsola- tos beállításokat végezhetünk el.

Egyetlen érték változtatását érdemes alap- esetben végrehajtanunk ez pedig az Application ID megadása. Ezzel egy egyedi elnevezést biz-

Q3 New Flex Mobile Project

C re n tc a F lex M ob ile A IR P ro je c t

Set the build paths fór the new Mobile project

páths " ~ - Seiver Setting?[ Project lo־ ו cation , Mobile Settings

; 1 Souice path i »!* Library palh : m, Native Extensions!

Frameworlc linkage: U5e SDK default (merged intő code)

Build path libraries:

Bü Flex 4 C:\Program Files\Adobe\Adobe Flash Builder 4.7 (64 B1t)\sdk5 ־ 6.0. Add Project..£> libs

Add SWC Folder.

< ... > Add SWC״|y1׳ Verify RJÍL digests (recommended fór production); fyü Reraowe unused RSLs; (y׳| Use local debug runtime sbared libraries when debugging ! |v׳J Automatically determine library ordering based on dependencies

Browsg..MaiQ source folder: ! src

Mám application fiié: Peldal.mxml Browse.

Application 1D: : fehcrKnsztiaaPeidat

( ? ) < 3ack N e z f > E 'n is h j ; Car.cei

tosíthatunk alkalmazásunk számára. Az alapér- ték megegyezik projektünk nevével, mi ezt mó- dosítottuk a 'FeherKrisztian.Demo' értékre. Az

Page 58: Androidos szoftverfejlesztés

ID egyes szavait pontokkal kell elválasztanunk egymástól.

Ha végeztünk a beállításokkal, kattintsunk a 'Finish' gombra.

Ekkor létrejön a projektstruktúra a Workspace-en belül, amit a Package Explorer-en keresztül is elérünk. A projektkönyvtár szerke- zetét a Windows Intézővel is ellenőrizhetjük.

s z íí B % 7י

A í$8 Példái* 0 src j

Λ ® (default package) :\>

i!> aft Flex 4.6.0 !> & bin-debug

& lib s

58______________ Androidos szoftverfejlesztés alapfokon

2.5. Az -app.xml fájlrólA szerkesztőablakban megjelenik a

Példái.mxml nevű fájl tartalma, mely alkalma­

ΏΙ Példái.mxml Példái -app.xml

Page 59: Androidos szoftverfejlesztés

59A Flash Builder

zásunk kiindulási forráskódja is egyben. Egy alkalmazás több MXML (Flex), vagy tisztán ActionScript forráskódból is állhat. Könyvünk példái számára bőségesen elegendő egyetlen forrásfájl használata.

Mielőtt a fő MXML forráskóddal megismer- kednénk, nézzük meg a 'Package Explorer'-ben szintén látható 'Peldal-app.xml' fájl tartalmát! Kattintsunk duplán a fájlra! Ekkor az megnyílik a szerkesztőterületen, egy külön fül alatt. (A könyv végén található függelékben egy ilyen XML fájl teljes tartalma áttanulmányozható.)

Az *-app.xml fájl különböző leíró adatokat tartalmaz az adott alkalmazásról, például itt adhatunk meg egyedi ikonokat az alkalmazás- nak, beállíthatjuk az adott verziószámot, itt mó- dosíthatjuk utólag is az alkalmazás jogosultsá- gait stb. A fájl szerkezete nem kötelezően fix, adott esetben kézzel is bővíthető.

Az *-app.xml fájl egy XML leírófájl, az egyes adatok o tag-ek közé vannak beírva. Mindé- gyikhez <!— megjegyzés --> alakú XML kom- mentek formájában rövid leírást is találunk. Amennyiben használni akarunk egy bejegyzést, a megjegyzéstageket el kell távolítanunk.

Ismerjünk meg néhány fontos bejegyzést!

Page 60: Androidos szoftverfejlesztés

Adobe AIR verzióRögtön a második sorban ezt találjuk:<applicationxmlns="http://ns.adobe.com/air/application/3.1">

A bejegyzés az adott Flex SDK-hoz tartozó minimális Adobe AIR verziót adja meg. Ha egy adott Flex SDK-ról átállunk egy másikra, elkép- zelhető, hogy más minimális AIR verzióval kompatibilis csak. Ilyenkor itt módosítanunk kell a verziószámot. Az XMLNS a NameSpace, azaz névtér rövidítése (lásd következő fejezetet).

Alkalmazásnév és verziószám

<id>Feher. Krisztián.Demo</id>

Módosíthatjuk az alkalmazás ID-ját: <filename>Demo</filename>

Megadhatjuk, hogy mi legyen a fájl neve. A telepítőcsomag fájlneve ez a név, plusz az .APK fájlkiterjesztés lesz:<versionNumber>0.0.0</versionNumber>

Az alkalmazás verziószáma. A Google Play Áruház és az Android csomagtelepítője ezt a

60______________ Androidos szoftverfejlesztés alapfokon

Page 61: Androidos szoftverfejlesztés

61A Flash Builder

verziószámot veszi alapul a verziók összeíráson- Irtásához.

Alkalmazás ikonjaA telepített alkalmazásunkhoz egyedi ikono-

kát rendelhetünk. Csupán az ikonok nevét meg- adva, azokat a Demo.mxml fájl könyvtárába (ez alapértelmezés szerint a projekt ,src' nevű könyvtára) kell helyeznünk. Nagyon fontos az ikonok méretének betartása, máskülönben az alkalmazásunk nem fogja tudni használni őket! Nem szükséges viszont minden méretben elké- szíteni alkalmazásunk ikonját. Az ikonképek ajánlott formátuma a PNG.

<icon><im agel6xl6x/imagel6xl6><image32x32x/ímage32x32><image36x36></image36x36><image48x48x/image48x48><image57x57x/image57x57><image72x72x/image72x72>< im agell4x ll4x /im agell4x ll4><imagel28xl28x/imagel28xl28>

</icon>

Page 62: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon62

Jogosultságok módosításaAlkalmazásaink jogosultságait utólagosan az

alábbi kezdetű bejegyzések módosításával vál- toztathatjuk meg:

<uses-permission android:name="..."/>

Egyelőre nem kell beállítanunk semmit az - app.xml fájlban, így nyugodtan be is zárhatjuk a szerkesztőablakát.

2.6. Az alkalmazások Flex forráskódja

Most nézzük meg közelebbről hogyan néz ki egy mobilalkalmazás forráskódja! Első példaal- kalmazásunk egy tisztán Flex alkalmazás lesz, ActionScript kódot egyelőre nem írunk.

A példaalkalmazás semmi mást nem fog esi- nálni, mint egy szöveget megjeleníteni a fel- használói felületen.

A Flex kódja egy XML leírófájl. Az összes látható és nem látható komponenst XML tag-ek közé beírva adhatjuk hozzá alkalmazásunkhoz. A Flex komponensei ActionScriptben vannak elkészítve, létrehozásukhoz viszont nem kell egyetlen sor ActionScript kódot sem írnunk. A Flex nagyon rugalmas és könnyen bővíthető,

Page 63: Androidos szoftverfejlesztés

63A Flash Builder

segítségével rendkívül rövid idő alatt létrehoz- hatunk tetszetős és intelligens felhasználói felü- leteket.

Új projekt létrehozásakor a Flash Builder au- tomatikusan generál egy kódkeretet, amit akár azonnal le is fordíthatunk.

<?xml version="1.0" encoding="utf-8"?> <s:Applicationxmlns:fx="http://ns.adobe.com/mxml/2009"

xmlns:s="library://ns. adobe.com/flex/spark" applicationDPI="160">

<fx:Declarations><!-- Piacé non-visual elements (e.g., Services, value objects) here --></fx:Declarations>

</s:Application>

A második sor a Spark névteret definiálja (XMLNS:S). A névtér a modern programozási nyelvek egyik fontos tulajdonsága. Egy névtér a hozzárendelt változókat, függvényeket stb. mi- nősíti, illetve azonosítja más névterekhez ké- pest.

A Spark tulajdonképpen a Flex komponen- seket tartalmazó architektúra. Rendelkezésre áll egy korábbi architektúra is, az MX. Ez utóbbit

Page 64: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon64

csak desktop alkalmazásoknál használhatjuk, ott viszont a Spark-kal keverten is. Mobilalkal- mazásoknál tehát a Spark komponensek haszná- lata lehetséges.

Látható, hogy az egész alkalmazás kódja két <s:Application> tag közé írandó, ahol a ״ :s" szin- tén a Spark névteret jelenti.

Az <fx:Declarations> ... </fx:Declarations> tag- ek közé írt Flex kóddal nem-vizuális kompo- nenseket hozhatunk létre. Könyvünkben ilyen Flex komponenseket nem használunk így ezt a kódrészt akár el is hagyhatjuk a forráskódból.

A Flex nyelvi lehetőségeivel igen összetett viselkedéssel ruházhatunk fel felhasználói felü- leteket, ám a valódi alkalmazáslogikát Action- Script-ben kell majd megírnunk. (Erre a könyv tényleges példaalkalmazásánál térünk ki a 4. és 5. fejezetben.)

Mielőtt ezt elkészítenénk, helyezzünk el egy szövegcímkét a felhasználói felületen a ״Demo alkalmazás." felirattal.

A Flash Builder jelentősen megkönnyíti a kódbeírást az ún. ״Code assist" szolgáltatásával, mely intelligens kódjavaslatok gyors beszúrását teszi lehetővé, automatikus kódkiegészítéssel. Ha nem jelenik meg automatikusan, akkor gé­

Page 65: Androidos szoftverfejlesztés

65A Flash Builder

pelés közben nyomjuk meg a CTRL+SPACE billentyűkombinááót. Ekkor az éppen beírt komponenshez stb. kapcsolódó tulajdonságokat stb. jeleníti meg egy lebegő listában. A lista mel- lett részletes leírást is találunk az adott lista- elemről. Az <s:La szöveg beírása után nyomjuk meg a CTRL+SPACE billentyűkombinációt és válasszuk ki az <>s:Label javaslatot! A listában a számítógép billentyűzetének fel-le billentyűivel lépkedve, majd az ENTER-t megnyomva, vagy az egérrel duplán kattintva szúrhatjuk be a megjelenített javaslatot.

<la|. < > <:LabU - iparfc-componénts

. «!;LatMiltwnReftdÉref - tparKcmponeot! ílaiHJperatíonSíate - sp«fcg!et»ta«S0n«‘ ״

oslayouffiase ־ spark,ías0־uB.a!Í3p'c׳rtOas5e5

·.·. *»layűu*H0riz««sWis111«0rg.«mMayóut : «!ajíoutisyoinMetsdata - «9«rofisyout t > le ootiayouiMode -

Közvetlenül az </s:Application> tag feletti sor- ba írjuk be a következőt:<s:Label x="20" y="30" text="Demo alkalmazás."/>

mi

:····־ '

Page 66: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon66

A komponensek megadásának fenti módja a rövidített írásmód. Létrehozhattuk volna a kom- ponenst egy hosszabb írásmóddal is:

<s:Label><s:x>20</s:x><s:y>30</s:y><s:text>Demo alkalmazás.</s:text></s:Label>

Mindkét írásmód helyes, a használat egyéni ízlés kérdése.

Ezzel elhelyeztünk egy szöveget az alkalma- zás képernyőjén, a vízszintes 20. és a függőleges 30. abszolút pixel koordinátákra.

2.7. Az első futtatásA Flash Builder két lehetőséget is kínál fej-

lesztett alkalmazásaink futtatására.Amennyiben nem rendelkezünk androidos

mobileszközzel, fejlesztőrendeszerünk operád- ós rendszerén is szimulálhatunk egy ilyen esz- közt. Ilyenkor az alkalmazás egyszerűen egy ablakban fut.

A Java-alapú fejlesztésekhez hasonló emulált Android rendszer használatára a Flash Builder- rel is lehetőség van. Erről a lehetőségről részle-

Page 67: Androidos szoftverfejlesztés

67A Flash Builder

tesen Véronique Brossier: Developing Android Applications with Adobe AIR c. könyvében olvas- hatunk. (Lásd a könyv végén található iroda- lomjegyzéket.)

Androidos eszköz megléte esetén az alkal- mazásunk ún. debug (a fejlesztés alatt használt, tesztelésre szánt) verzióját közvetlenül az esz- közön is futtathatjuk. Ez egy nagyon kényelmes szolgáltatás: az alkalmazás ebben az esetben fel is települ az eszközre, sőt, egy esetleges korábbi verziója el is távolítódik. Mindez automatikusan a háttérben történik meg. Ennek a futtatási módnak az előfeltétele, hogy az eszközt a fej- lesztőrendszerünk operációs rendszere fel tudja ismerni. (A saját tapasztalat azt mutatja, hogy egy a készülékbe behelyezett külső SD kártya esetén jóval nagyobb eséllyel ismeri fel az ope- rációs rendszer a készüléket.)

Alkalmazásunk futtatásához kattintsunk a Flash Builder ikonsorának a lejátszás gombot mintázó ikonjára:

Page 68: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon68

Projektünk első futtatásakor a 'Run Confi- gurations’ párbeszédablak jelenik meg. Itt be kell állítanunk néhány futtatási tulajdonságot.

IS Run Configuralions im m

C i b h I b , πίηγιη1|κ , 111111 t ű n c i i n l i i j u r n i i n n s £''0*j ■... .Rúna Mobile applicatlori ׳ ■ !

K ג; ״ Nametj Pcldal j. ly|.v fii tc-i ® Maitv V Source Common:

CJ Desktop Applicatior ;; Project:

!7' Java Application Példái Biowse... 1Λ JUrit ■ Application 'ile;c'׳Vaven üj ׳״■ j ;src/Pe cal.TWml VB Mobile Application

8 Példa) Target platform T ajk Contexl Test ג!'·Cl Web Application

Googlc Arxtrold ״ ;Apple! j FcherKriiztian.lVIclal.d·!

í ׳ ..........AIR Simulótor vj Build Target· device v ו«0: :Customize launch.״ iLatmch Configuralton

Device: Motorola XT531 v Conligtire...

j íyíl Clear applicatidó, tinta on éach launch

Filter matched 9 019 i térni . Apply Reveri

m a. ti i ·■ ü f f l ״ , ! f*

A legtöbb esetben csak a 'Main' fül alatt ta- !álható néhány beállítást használjuk.

A 'Launch method' lehetőségnél az ״On AIR Simulator" lehetőség jelenti a szimulált futta- tást. Ilyenkor ki kell választanunk egy készü- lékprofilt. A Flash Builder-rel együtt feltelepül számos profil, de teljesen egyedit is létrehozha- tünk. Egy profil lényegében egy eszköz képér-

Page 69: Androidos szoftverfejlesztés

69A Flash Builder

nyőtulajdoságait határozza meg, egyedi névvel ellátva.

Az ״On device" lehetőség a fentebb említett, közvetlen mobileszközön történő futtatást jelen- ti. A Debug verzió teljesértékű alkalmazás ugyan, ám csak a fejlesztés alatt érdemes hasz- nálni, ugyanis fordítás során rengeteg metaadat is beépül az alkalmazásba, melyekkel a hibák keresése végezhető el hatékonyan. A Debug verzió továbbá egy ún. ideiglenes fejlesztői- publikálási tanúsítványt tartalmaz, ami egy idő után (kb. egy év) elévül. A tanúsítványokról a következő fejezetben még szó lesz.

Érdemes bejelölni a 'Clean application data on each launch' lehetőséget. Ilyenkor minden futtatás előtt törlődnek a korábban ideiglenesen tárolt futtatási információk.

A ,Run' gombra kattintva egy párbeszédab- lak jelenhet meg, mely a forrásfájl mentésére kérdez rá futtatás előtt. Ebben az esetben érdé- mes kipipálni az ,Always savé resources before launching’ opciót, hasonló esetben legközelebb így nem fog megjelenni a párbeszédablak.

Az alábbi képen a Windows-on szimulált verzió futása látható. Az alkalmazás felületén megjelenik a fentebb megadott szöveg.

Page 70: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon70

ΕΞΙ Példái-.1 — ״Device

Demo alkalmazás.

Szimulált futás esetén a szimulációs alkal- mazásablakban találunk egy 'Device' menüt. Ennek a menüpontjaival a készülékeken a lég- több esetben valamilyen fizikailag is megtalál- ható gombra történő reakciót tesztelhetjük, il- letve a különböző irányokba történő forgatást is ״ szimulálhatjuk".

Page 71: Androidos szoftverfejlesztés

71A Flash Builder

A szimulációs mód minősége igen jó, akár úgy is megírhatunk egy komplett alkalmazást, hogy az előtte valódi mobileszközt ״ látott vol-na".

Itt hívjuk fel a figyelmet a Flash Builder kód- szerkesztő területének alján található 'Problems' fülre. Itt egy listában jelennek meg a fordítás során talált hibák. A lista a Flash Builder alapér- telmezett beállításai mellett az adott állomány vagy projekt minden mentésekor frissül, mivel a Flash Builder alapesetben minden mentéskor kódelemzést és bizonyos fordítási műveleteket is elvégez annak érdekében, hogy minél gyor- sabban futtatni tudjuk alkalmazásainkat.

Vizsgáljuk meg, hogyan működik ez a fűnk- ció! Ejtsünk szándékosan hibát a kódban! Ehhez módosítsuk a <s:Label kódrészt <s:Labl -re és mentsük el a projektet! A hibára a Flash Builder felhívja a figyelmünket a listában, de a forrás- kód érintett sora elé is elhelyez egy piros fi- gyelmeztető jelzést:

Page 72: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon72

91 Példái.mxm l Σ3 [

l<?xml v e r s io n 1 .0 " ־ " e n c o d in g = "u tf -8 ״ ?>2 < s :A p p l ic a t io n xm lns: fx="h t t p : / / n s .adobe.com3 x m l n s : s = " l ib r a r y : / / n s . a d o b e . c4 ■<fx:Declarations>5 < !—- P iacé n o n -v i su a l e lem ents ( e .g .6 < / fx :D e c la r a t io n s >7

© 8 < s :L ae l x = 2 0 y="30" text="Demo alkalma "״9

1 0 < / s :A p p lica t io n >11

t í Problems ?4 ·ő Data/Servicesl EP NetWork Monitor |1ij ASDoc 1 error, 0 wamings, 0 others.......................................................... ..........................Description * © Errors (1 item)

© Could notresolve <s:Lael> to a component implementation.

Amennyiben több hibát is talál a kódellenőr- zés és hosszabb forráskóddal dolgozunk, a lég- könnyebben úgy tudunk a hibás sorra ugrani, hogy a megjelenített hibalistában duplán kattin- tünk a konkrét hibabejegyzésen.

Most javítsuk ki a hibát és mentsük el a pro- jektünket!

2.8. Kész alkalmazások publikálásaA fejlesztési tevékenység egyik fontos moz-

zanata a kész alkalmazás telepítőcsomagjának

Page 73: Androidos szoftverfejlesztés

73A Flash Builder

elkészítése, hogy ezzel mások is használhassák alkalmazásunkat.

Ehhez válasszuk ki a ,Project' menü 'Export Release Build' menüpontját! A megjelenő párbe- szédablakban beállíthatjuk a publikálás tulaj- donságait.

Export Release BuildmExport Rnluns«! Ruild

Build and export art optimized release־<׳|uality version of your application

Eroject: Példái

Application: Példal.mxml

Tat get plalforms Jjf) Google Android

Export

Export to folder B[0wse...

/Példa!□ Keep bm-release-temp folder Xeáffi Morft

Bajé filename Példái

Export a$

Φ Signed packages fór each target platform ( .) Signed AIR package fór installaíion on desktop

O Injermediate AIRI package that must be manually signed later v j

t ie x t >©

Page 74: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon74

Az 'Export to folder' és a 'Base filename' me- zők a legfontosabbak. Előző annak a mappának az elérési útját adja meg, ahová a telepítő- csomagot el akarjuk menteni, utóbbi pedig a kész telepítőcsomag fájlneve lesz. Android ese- tében egyetlen fájl jön létre, .APK kiterjesztéssel.

A 'Next' gombra kattintva további csomago- lási beállításokat végezhetünk el (Tackaging Settings').

°״ mExport R i'lw e BulidmPl>1.-l<1M|lm| S•1111111(5

0 cp l׳j l״ t1c11l j a IXq ita l S iyn .'ilu r«ן Packaq» Contocm i NsU ve Cxtcm lom :

[·?Jlmtall and leunth ·ppliíation on any connected devicei

i Mporl Optiom:Ü Export nppllcnlicn with captlva luntlIMExport appllcoticn titat ujci a il'arcd Alit nintlmo :·־׳

AIR dowiltnid URL: | Android Markit - http· //mnrke!.and'0ícl<om/cleto1l5?ld״<on1.ad Tilt URL )pecllied fór «0 applkation nitut point te a dowrload le wlwa Hu! npptn ítliort will ha hosrad

T«0«tplt1l(01m>:! <H!ooplt Android

Az 'Install and launch application on any conected devices' lehetőséget kiválasztva publi- kálás után egyből telepíthetjük is az alkalmazást a számítógéphez csatlakoztatott eszköz(ök)re.

Page 75: Androidos szoftverfejlesztés

75A Flash Builder

A 'Deployment' lapon két exportálás! mód között választhatunk, melyek azt befolyásolják, hogy a telepített alkalmazás milyen módon használja az Adobe AIR futtatókörnyezetet.

Az 'Export application with captive runtime' csomagolással egy olyan alkalmazást telepíthe- tünk, melyhez egy komplett Adobe AIR futtató- környezet van ״hozzácsomagolva". Ebben az esetben a céleszközön nem kell külön telepíteni az Adobe AIR-t. Ez a csomagolási módszer né- mileg növelheti a telepítőfájl méretét.

Az 'Export application that uses a shared AIR runtime' lehetőséget kiválasztva az alkal- mazás igényelni fog egy külön telepített AIR környezetet. Amennyiben a céleszközön nincs ilyen telepítve, a telepítő automatikusan fel fog- ja ajánlani és lehetővé teszi az Adobe AIR telepi- tését.

Első exportáláskor a 'Digital Signature' lap- nál egy piros figyelmeztető jelzést találunk. Minden androidos telepítőcsomaghoz ugyanis egy fejlesztői tanúsítványt is társítani kell. Ez a fejlesztők azonosítását hivatott biztosítani.

Page 76: Androidos szoftverfejlesztés

76 Androidos szoftverfejlesztés alapfokon

Deployment © D ig ita l Signature Package Contents j

Certificate:

£a«word:J Regember password fór this session

Két lehetőségünk van. Igénylünk tanúsít- ványt, vagy saját aláírását készítünk. Mindkettő út járható és teljesen egyenértékű az alkalmazás publikálása szempontjából. Előbbi előnye a na- gyobb elfogadottság, utóbbié a gyorsaság, hi- szén azonnal és nem mellesleg ingyen előállít- hatunk egyet a Flash Builder-rel (a külső féltől származó tanúsítványok beszerzése költségek- kel járhat). A tanúsítványokhoz jelszót is meg kell adnunk.

Maga a tanúsítvány egy fizikailag is különál- ló titkosított fájl, amit meg kell adnunk az első exportálás során, a hozzá tartozó jelszóval együtt. A létrehozható tanúsítványok száma nincsen korlátozva.

A visszaélések elkerülése érdekében tanú- soványainkat soha, semmilyen körülmények között se adjuk oda másnak és ne tegyük köz- zé!

Page 77: Androidos szoftverfejlesztés

77A Flash Builder

Create Self-Signed Digital Certificatem

Publisher name*:

Organizational unit:j

Orcianization name: |

US !! Choose...

!1024-RSA v

Coűntry:

Type:

Password*:

Confirm password*: \

*required

j i Browse...Savé a5:

CancelOK(?)

Ha ezzel elkészültünk, visszatérhetünk a csomagolásbeállító párbeszédablakhoz. A 'Package Contents' és a 'Native Extensions' la- pok beállításait nem kell módosítanunk.

A 'Finish' gombra kattintva a Flash Builder elkészíti a megadott könyvtárban a telepítő- csomagot.

Page 78: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon78

A telepítőcsomagot feltölthetjük a 'Google Play', vagy az 'Amazon Appstore fór Android' webáruházakba.

Az alkalmazások webáruházban történő közzététele regisztrációhoz kötött.

A Google Play Áruházban egy egyszeri re- gisztrációs díj (kb. 25 dollár) kifizetése és a meg- felelő szerződési feltételek elfogadása után in- gyenesen, vagy díj ellenében letölthetővé tehet- jük alkalmazásainkat. A fejlesztői regisztráció egy meglévő Google fiókkal lesz összekapcsolva és külön adminisztrációs felületen végezhetjük el az alkalmazásaink közzétételét, ill. frissítését.

Elméletileg semmilyen megkötés nincsen ar- ra nézve, hogy hol szabad az elkészült alkalma- zásokat közzétenni. Akár saját honlapunkon is elérhetővé tehetjük azt! Ebben az esetben vi- szont egy androidos eszközről nem tudjuk köz- vétlenül feltelepíteni őket. Előbb le kell tölte- niink asztali számítógépen egy adathordozóra (pl. memóriakártyára, amit utána behelyezünk a mobilkészülékbe) és manuálisan kell elindíta- nunk a telepítést.

Ezzel elkészültünk első alkalmazásunkkal.

Page 79: Androidos szoftverfejlesztés

79A Flash Builder

A következő fejezetekben az imént bemuta- tott lépéseket már nem fogjuk újra leírni, csupán hivatkozunk majd rájuk.

2.9. Projektek exportálása, importálása

A Flash Builder-rel készített projektek moz- gatásának egyik egyszerű módja az exportá- lás/importálás, mely mindig az aktuálisan hasz- nált workspace-re vonatkozik.

Az aktuális projektet a 'Fiié' menün keresztül is exportálhatjuk, de alternatívaként a Package Explorer-ben a jobb egérgombbal a projekt ne- vére kattintva a helyi menüből az 'Export' lehe- tőséget is kiválaszthatjuk.

Ekkor egy varázsló indul el. Az első párbe- szédablakban ki kell választanunk a projekt típusát. Esetünkben ez egy Flash Büilder pro- jekt.

Page 80: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon80

Export

ΛO

S e lc c t

Export a Flash Builder project.

Select an export destination:

C3׳ General &!· Flash Builder

S í Flash Builder Project ftí) ReleaseBuild

&■ Install ׳·ísS׳ Java C.tí׳ Run/Debug íSí־ Tasks ic i· Team

Eií»í!> '@

A 'Next' gombra kattintva a következő pár- beszédablakban mégegyszer pontosíthatjuk, mely projektet akarjuk exportálni és meg kell adnunk egy célkönyvtárat is.

Page 81: Androidos szoftverfejlesztés

81A Flash Builder

m Export Flash Builder Project

E x p o r t F la s h B u ild e r P ro je c t

Export a Flash Builder project as an FXP or ZIP fiié.

Project Példái

FXP fii.· C V K01‘.\Kr1szt1an\Oesktop\Pelda1.fxp

Validate project compilation |/י|

< jjack 1. >· Einish ] Cancel

A 'Finish' gombra kattintva megtörténik az exportálás. A megadott könyvtárban egy .FXP kiterjesztésű fájl jön létre.

Projektek importálása hasonlóan történik. Az importálást végző varázsló első párbeszédabla- kában ki kell választanunk az importálandó projekt típusát.

Page 82: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon82

S8 import

S e le c t

Import a Flash Builder project.

Select an import source:

: type f Iter text

tóJ־ General

& CVS ־Flash Buli dér

á l Flasn 8u ild e r Project

! 6 M X Skin A rtw ork

iá· G it

la · Install

& M aven

Run/Debug

tói· Tasks G> Teamla · XM L

© ’ j e > ' ..... ] oisfi Concel

A következő lépésben pedig megadhatjuk az importálandó projekt helyét, valamint azt is, hogy milyen módon jöjjön létre az új projekt az aktuálisan használt workspace-ünkben.

Page 83: Androidos szoftverfejlesztés

83A Flash Builder

Ü l import Flash Builder Project

i Im p o r t F la s h B u ild e r P ro je c t

! Import a Flash Builder project írom an FXP, ZIP, or project folder.

Import project:!·)Fiié: i C:\munka\temp\Peldal.h<p

:; ö Project folder:

.Import method

1 ןרוו ״ ■r l ni ׳ט < ■p ־1 י זי ] ■1 סן >

Ι־ χ 1! ר׳ ( I I K W p i o j o c t 10: : C : \ l ) s e r s \ K 1 i a n \ D e s k l r > p \ K o n y v \ F I a s h . V ' / I ’ \ P ( í I í i a ״1 1 ; : B r o w s e . . . i

‘ /.־: rnpoi 1 ■ ont&nls ■ nfo oxisLincj p in jcct

, v ׳ Példa íbK δ ovvse

·í׳κ, példa■ ; á oy^e...

í j O^erwrite existing project

! i Browse,., j

íf l

Cancel;Finishg . 1c k©

Amennyiben már létezik egy, az importálan- dó projekttel megegyező nevű projekt, az im- portált projektet átnevezhetjük, így az új pro- jektként fog megjelenni.

Egy meglévő projektbe is importálhatunk, il- letve megegyező név esetén felül is írhatjuk az importálandó projekttel a régit.

A 'Finish' gombra kattintva végrehajtódik az importálás.

Page 84: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon84

3. Flex/ActionScript alapismeretek

3.1. ActionScriptAz ActionScript jelenlegi legfrissebb verziója

a 3.0. A könyvben az Actionscript részletes is- mertetésére nem vállalkozunk, de a nyelv lég- fontosabb alaptulajdonságait mindenképpen meg kell ismerni.

3.1.1. AdattípusokMinden program adatokkal dolgozik, me-

lyeket szimbolikus nevekkel látunk el. Az ad a- tok tartalma a program futtatása során megvál- toz(hat)nak, ezért változóknak nevezik őket. Többféle típusú változó áll a programozók ren- delkezésére, ezeket a típusokat adattípusoknak nevezzük.

Page 85: Androidos szoftverfejlesztés

85Flex/ActionScript alapismeretek

Az ActionScript 3.0-ban az adattípusok min- degyike objektumot takar. Kétféle adattípus- csoportot különböztetünk meg: primitív és komplex adattípusokat. Az egyes adattípusok nevei, lehetséges értékei és közvetlen deklaráció (létrehozás) utáni alapértelmezett értékei a kö- vetkezők.

Primitív adattípusokBoolean: csak két értéket vehet fel. true vagy

false. Az alapértelmezett érték a false. int: 32 bites előjeles egész számok tárolására az -

2,147,483,648 (-231) - 2,147,483,647 (231 - 1) ér- téktartományban. Az alapértelmezett érték 0.

uint: 32 bites előjel nélküli egész számok tárolá- sára használható a 0 és 4,294,967,295 (232 - 1) értéktartományban.

Null: csak egyetlen értéket vehet fel, ez pedig a null. Fontos megjegyezni, hogy a komplex és a String adattípusok alapértelmezett értéke szintén null. A Boolean, int, Number, uint adattípusok viszont nem vehetik fel a null ér- téket, amennyiben null értéket adunk ilyen változóknak, az ActionScript egy megfelelő alapértelmezett értékkel helyettesíti a null-t (például O'-val).

Page 86: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon86

Number: 64 bites, dupla pontosságú számok tárolására alkalmas a 4.940656458412467e- 324 és 1.79769313486231e+308 értékhatárok között. Egész és lebegőpontos számok tárolá- sára is alkalmas, előbbiek esetében akkor ja- vasolt, ha a 32 biten ábrázolható értéktartó- mány nem elegendő. Alapértelmezett értéke NaN, ami nem definiált értéket jelent.

String: 16 biten, UTF-16 formátumban tárolt szövegek tárolására alkalmas. Alapértelme־ zett értéke a null, ami nem összekeverendő az üres sztringgel ("").

Object: az osztálydefiníciók alaposztályaként funkciónál. Alapértéke a null.

Void: kizárólag visszatérési értékekhez haszná- latos és egyetlen értéket vehet fel: undefined.

Komplex adattípusokA komplex adattípusokkal a könyvben nem

foglalkozunk, de a rend kedvéért ezeket is meg- említjük.

Array, Date, Error, Function, RegExp, XML, XMLList. Változókat az alábbiak szerint hozha- tünk létre:var valtozo_neve:típus;

például:

Page 87: Androidos szoftverfejlesztés

87Flex/ActionScript alapismeretek

var Szoveg:5tring;

Az ActionScript ún. case-sensitive szintakti- kával rendelkezik, ami azt jelenti, hogy megkü- lönbözteti a kis- és nagybetűket. A fenti példá- bán deklarált változóra tehát csak 'Szöveg' né- ven hivatkozhatunk programjaink forráskódjá- bán, a 'szöveg' név használata hibaüzenetet eredményezne fordításkor.

3.1.2. UtasításokAz ActionScript utasításait pontosvesszővel

zárjuk. Az önmagában írt pontosvesszű egy üres utasításnak felel meg. Használható akkor, amikor az adott kódhelyen utasítása megadása kötelező, de nem akarunk semmilyen explicit műveletet végrehajtani.

Az utasításokat blokkokba is foglalhatjuk, ilyenkor több utasítás is egyetlen utasításként lesz végrehajtva. Az utasításblokk általános formája:

{utasítási;utasítás2;

}A záró kapcsos zárójel után nem kell pontos-

vesszőt írni.

Page 88: Androidos szoftverfejlesztés

3.1.3. Megjegyzések a kódbanA programozás során hasznos, ha emlékezte-

tőket, megjegyzéseket, magyarázatokat adha- tünk a forráskódhoz. Ezeknek a megjegyzések- nek, kommenteknek nincsen hatása a program működésére, ám saját magunk számára, vagy bárkinek, akinek értelmeznie kell a forráskódot, nagy segítséget jelenthetnek ezek a magyarázó leírások.

Egysoros és kétsoros magyarázatokat hasz- Hálhatunk ActionScriptben, melyeket a // és /* */ jelekkel vezethetünk be.Rövid példával illusztrálva:

//egysoros megjegyzés

/*többsorosmegjegyzés

V

3.1.4. Operátorok és precedenciákAz alábbi táblázat az ActionScript operátora-

it tartalmazza csökkenő preferencia-, azaz vég- rehajtási sorrendben (tehát legfelül a legmaga- sabb precedenciával rendelkező operátorok állnak).

88______________ Androidos szoftverfejlesztés alapfokon

Page 89: Androidos szoftverfejlesztés

89Flex/ActionScript alapismeretek

Csoport Operátor

Elsődleges [] {x:y} () f(x) n e w x .y x[y] <></>

@

Postfix X++ x —

Unáris ++x --X + ־ ~ ! d e le t e t y p e o f v o id

Multiplikatív * / %

Additív + -

Bitenkénti eltolás « » » >

Összehasonlító < > < = > = as in in s t a n c e o f is

Egyenlőség — ן----------1 —

Bitenkénti ES &

Bitenkénti KIZÁRÓ VAGY

Λ

Bitenkénti VAGY 1

Logikai ÉS & &

Logikai VAGY II

Feltételes ?:

Hozzárendelés = *= /= %= += -= « = » = » > =

& = Λ= | =

Vessző, felsorolás /

Page 90: Androidos szoftverfejlesztés

Zárójelek alkalmazásával az alapértelmezett precedenciasorrendet más nyelvekhez hasonló- an az ActionScriptben is befolyásolhatjuk.

3.1.5. Elágazási szerkezetekKülönböző feltételek, értékek vizsgálata

alapvető programozási gyakorlat. A vizsgálatok eredményétől függően lehetséges más-más mű- veleteket végrehajtatni. Ennek az eszközeivel is megismerkedünk.

3.1.5.1. i f .. elseA feltételek vizsgálatának általános szerkeze-

te:

if (feltétel) utasítási; else if (feltétel) utasítás2; else utasítás3;

Az if .. else vizsgálatnak minimum egy if -el bevezetett feltételvizsgálatot tartalmaznia kell, ám az else if és else ágak opcionálisak.

Az else if után álló utasítás akkor hajtódik végre, ha a megelőző if feltétele nem teljesül.

Amennyiben csak else-t írunk, az egyfajta alapértelmezett műveletként is felfogható, ami akkor hajtódik végre, ha egyetlen megelőző if, vagy else if feltétel sem teljesül.

90______________ Androidos szoftverfejlesztés alapfokon

Page 91: Androidos szoftverfejlesztés

91Flex/ActionScript alapismeretek

Az alábbi példa egy vizsgaértékelő program része is lehetne:

if (pontszam > 60){vizsgajegy=5;dicseret=true;}

else if ((pontszam <= 60)&&(pontszam >40)) vizsgajegy=4;

elsevizsgajegy =3;

3.1.5.2. switchAmennyiben ugyanannak a változónak több

lehetséges és konkrét értékeit akarjuk megvizs- gálni, akkor az if .. else vizsgálatok nehezen átláthatóvá válhatnak.

A switch használatával elég a vizsgált váltó- zót egyszer megadni. Általános formája:

switch(valtozo){case ertekl:

utasítási; break;

case ertek2: utasitas2;

Page 92: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon92

utasitas3;break;

default:utasítási;break;

}

A vizsgált értékeket a case kulcsszóval kell bevezetnünk. A feltétel teljesülése esetén a case után megadott utasítások hajtódnak végre, égé- szén a break kulcsszóig. A break használata nél- kiil az összes soron következő case utáni utasí- tás végrehajtódna.

A default után is ajánlott használni a break-et, azon egyszerű oknál fogva, hogy a default bár- hol állhat, nem csak az utolsó helyen.

Ismét egy egyszerű példával élve:

switch(osztalyzat)1

case 5:bizonyitvany=true;dicseret=true;break;

default:bizonyitvany=true;dicseret=false;break;

}

Page 93: Androidos szoftverfejlesztés

93Flex/ActionScript alapismeretek

3.1.6. Ciklusok

Utasítások ismételt végrehajtására ciklusokat használunk. A ciklusokban elhelyezett utasítá- sok legtöbbször bizonyos számú alkalommal, ill. egy bizonyos feltétel teljesüléséig hajtódnak végre, újra és újra. Adott feladat esetén az is cél lehet, hogy a ciklusok meghatározatlan ideig végrehajtódjanak, ekkor ún. végtelen ciklusról beszélünk.

A ciklusokból a meghatározott feltétel telje- sütésétől függetlenül a break; utasítással bármi- kor kiléphetünk.

3.1.6.1. Előltesztelő ciklus (while)A while ciklust szokás előltesztelő ciklusnak

is nevezni, mivel a ciklus végrehajtásának félté- tele a ciklus első végrehajtása előtt mindenkép- pen kiértékelődik.

Általános formája:while (feltétel){utasítás;}

Az alábbi példában egy egész számként dek- larált i nevű változó értékét annyiszor növeljük, amíg értéke kisebb mint 10.

Page 94: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon9 4

i=0;while (i<10){

++i;}

3.1.6.2. Hátultesztelő ciklus (do .. while)A do .. while ciklust szokás hátultesztelő cik-

lusnak is nevezni, mivel a ciklus végrehajtásá- nak feltétele először csak a ciklus első végrehaj- tása után értékelődik ki. Általános formája:

do{utasítás;} while (feltétel)

Az előző példa do .. while ciklussal:.

i=0; do {++i;} while (i<10)

3.1.6.3. Számláló ciklus (fór)A fór ciklus az előltesztelő ciklusnak egy spe-

ciális fajtája, mivel külön megadható a ciklus ismétlődését befolyásoló változó és a változó léptetésének az értéke. Általános alakja:

Page 95: Androidos szoftverfejlesztés

fór( értékadás ; feltétel; léptetés){utasítás;}

Az alábbi példa 0-tól 100-ig terjedően a páros számok összegét egy szám nevű változóban tárolja el:

for(i=0; i<=100;i+=2)

Flex/ActionScript alapismeretek____________________ 95_

szam+=i;}

A fór ciklusok használatakor előfordulhat, hogy bizonyos feltételek fennállása esetén nem akarjuk az egész ciklust végrehajtani, hanem az aktuális műveletnél a ciklus elejére ugrunk, tehát átugrunk bizonyos utasításokat. Erre használhatjuk a continue; utasítást.Például:

for(i=0; i<=100;i+=2){//a 10 és 20 közötti számokat kihagyjukif(i>10 && i<20) continue;szam+=i;}

Page 96: Androidos szoftverfejlesztés

96______________Androidos szoftverfejlesztés alapfokon

3.1.7. FüggvényekAmennyiben egy több utasításból álló kód-

blokkot a program több részén is végre akarunk hajtani, érdemes ún. függvényt írni, mellyel az utasításblokkot egyetlen, egyedi, általunk meg- adott névvel hívhatjuk meg. Létrehozásának általános alakja:

hozzáférés fuggveny_név (argumentumok):visszatérési érték{utasítások;}

Az alábbi példában egy numerikus, szám ne- vű váltózó értékét egy függvénnyel akarjuk nullázni. A függvény kódja:

var szanrint;

function nullaz().void{

szam=0;}

A függvény nem ad vissza értéket, ezért ti- pusa void.

Valahányszor csak használni akarjuk a függ- vényt, elég a nulláz(); utasítást elhelyeznünk programunk megfelelő pontján.

Page 97: Androidos szoftverfejlesztés

97Flex/ActionScript alapismeretek

Más visszatérési érték esetén a függvény kódblokkjában elhelyezett return kulcsszóval tudjuk megadni a visszatérési értéket.

Két szöveges változó tartalmának összeakap- csolását például a következő függvénnyel vé- geztethetjük el.

function str_osszaad (sl:String;s2:String):String

{return sl+s2;

}A függvényt például így is használhatjuk

programunkban:

var szovegl:String; var uj_szoveg:String; szovegl="Az ActionScript";

uj_szoveg=str_osszead(szovegl,"a legjobb!");

Az uj szoveg nevű változó tartalma a függ- vény meghívása után ez lesz: "Az Actionscript a legjobb!"

3.1.8. Hozzáférések szabályozásaA gyakorlatban mind a változók, mind a

függvények és osztályok hozzáférhetőségét sza- bályozni szoktuk és szabályozni is kell. (A

Page 98: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon9 8

függvények változóihoz nem kell megadnunk a hozzáférés módját.)Három hozzáférési módot említek meg: public: minden hívó számára hozzáférhető, protected: csak a definiáló osztály példányai

számára elérhető.priváté: csak a definiáló osztály számára hozzá-

férhető.Például:

public var szam:int; public function nullaz():void

3.1.9. OsztályokAz objektumorientált programozás alapvető

eszközét jelentik az osztályok. Egy osztály fűnk- cionálisan összetartozó függvények és változók egybecsomagolt, absztrakt egysége.Lássunk egy példát:public eláss osztalynev {

public var valtozo:int; public function osztalynev() {} public function muvelet():void{

++valtozo;)

}public uj osztaly = new osztalynev();

Page 99: Androidos szoftverfejlesztés

99Flex/ActionScript alapismeretek

A fenti példában létrehozunk egy osztalynev nevű osztályt. Az osztálynak van egy saját vál- tozója, azaz tulajdonsága és két függvénye, azaz metódusa.

A művelet() nevű függvény a valtozo nevű osztálytulajdonságon végez el műveletet.

A másik függvény neve megegyezik az ősz- tály nevével. Ez egy speciális függvény, az ún. konstruktőr, mely az osztálypéldány létrehozá- sakor automatikusan végrehajtódik. Különféle inicializációs műveletek végrehajtására hasz- nálható például. A konstruktőrhöz nem lehet rendelni semmilyen visszatérési értéket, még akkor sem, ha az void lenne.

Egy osztálydefiníció önmagában még sem- mire sem jó. Hogy használni is tudjuk, először létre kell hoznunk egy osztálypéldányt. Ezt végzi el az utolsó sor:

public uj_osztaly = new osztalynev();

Ezután az osztály tulajdonságára és metódu- sára a következő módon tudunk hivatkozni:

uj_osztaly.valtozo; uj_osztaly.muvelet();

Page 100: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon100

A könyv fejezeteiben bemutatott egyszerű példákban nem fogunk mi magunk explicit lét- rehozni osztályokat, de tudnunk kell, hogy a színfalak mögött így is számos osztály létrejön. Amikor például Flex komponensekkel dolgo- zunk és rájuk hivatkozunk, lényegében osztá- lyokat hozunk létre és használunk.

Amennyiben külső fájlokban tárolt osztályo- kát akarunk használni, azokat importálnunk kell az import utasítással. Például:import air.net.SocketMonitor;

3.2. FlexAz alábbiakban elsajátítjuk azokat az alapis-

mereteket, melyek elengedhetetlenül szüksége- sek az Apache Flex-szel végzett munkához.

3.2.1. XML forráskódok írásaA Flex forráskód egy XML leírófájl. Az ősz-

szes látható és nem látható komponenst XML tag-ek közé beírva kell felvennünk alkalmazó- sunkba. A Flex komponensei ActionScriptben vannak elkészítve, létrehozásukhoz viszont nem kell egyetlen sor ActionScript kódot sem írnunk.

Page 101: Androidos szoftverfejlesztés

101Flex/ActionScript alapismeretek

Új projekt létrehozásakor a Flash Builder ge- nerál egy kódkeretet.

<?xml version="1.0" encoding="utf-8"?><s:Applicationxmlns:fx="http://ns.adobe.com/mxml/2009"

xmlns:s="library://ns. adobe.com/flex/spark" applicationDPI="160">

<fx:Declarations><!— Piacé non-visual elements (e.g., Services, value objects) here --></fx:Declarations>

</s:Application>

A második sor a Spark névteret definiálja (XMLNS:S). A Spark tulajdonképpen a Flex kom- ponenseket tartalmazó architektúra. Létezik egy korábbi architektúra is, az MX. Ez utóbbit csak desktop alkalmazásoknál használhatjuk, ott viszont a Spark-kal keverten is. Mobilalkalma- zásoknál a Spark komponensek használatára kell törekedni.

Látható, hogy az egész alkalmazás kódja két <s:Application> tag között helyezkedik el, ahol az ״ :s" szintén a Spark névtér megadását jelenti.

Hasonlóan felépített tag-ek segítségével használhatjuk a többi Flex komponenst is. A sorok tördelése tetszőleges.

Page 102: Androidos szoftverfejlesztés

A Flex nyelvi lehetőségeivel igen összetett viselkedéssel ruházhatunk fel felhasználói felü- leteket, ám a valódi alkalmazáslogikát Action- Script-ben kell megírnunk (lásd a 3.3 fejezetet).

3.2.2. Megjegyzések a kódbanXML megjegyzéseket a <!-- ... --> határoló-

jelek közé írhatunk. A sorokat a megjegyzése- ken belül tetszés szerint tördelhetjük, nincs kü- lönbség az egysoros és többsoros megjegyzések írásában. Például:<!-Ez egy XML megjegyzés

3.2.3. Alapvető vizuális Flex komponensekA négy legalapvetőbb komponens (más né-

ven vezérlő), melyekkel most megismerkedünk, egyszerű szövegek megjelenítését, bevitelét, valamint felhasználói interakciót tesznek lehe- tővé.

Röviden bemutatjuk a vizuális komponensek felhasználói felületen történő elhelyezésének alapvető módjait is. Az ismertető messze nem teljes és csak olyan szintű bemutatásra vállalko- zik, mely a könyv témája szempontjából elen- gedhetetlen.

102_____________Androidos szoftverfejlesztés alapfokon

Page 103: Androidos szoftverfejlesztés

3.2.3.1. Pár szóban a Layout-okrólLayout alatt a vizuális komponensek elren-

dezését értjük a mindenkori felhasználói felüle- ten

A Flex-ben alapvetően háromféle elrendezést használhatunk:• Abszolút pozicionálás: a BasicLayout

osztály segítségével. Ez az alapértelmezett layout mód is egyben.

• Relatív pozicionálás: (a pozicionálás a tar- talmazó konténerhez/komponenshez képest történik, ami alapesetben maga az alkalma- zás): a HorizontalLayout, VerticalLayout, TileLayout osztályok segítségével

• Constraint-alapú elrendezés: a komponen-sek széleinek helyzetét, ill. elhelyezkedését adhatjuk meg a tartalmazó konténer- hez/komponenshez képest. A megjelenés tulajdonságait a left, right, top, bottom, horizontalcenter, verticalcenter tulajdonsá- gok beállításával adhatjuk meg. A constraint- alapú elrendezés további lehetőségeire ebben a könyvben nem térünk ki. A constraint layout tulajdonképpen a BasicLayout egy speciális felhasználási módja. A constraint-

Flex/ActionScript alapismeretek___________________ 103

Page 104: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon104

alapú elrendezés további lehetőségeire ebbena könyvben nem térünk ki.

A komponensek méretezése szintén három- féleképpen történhet:

- Alapértelmezett méretezés: fix, vagy tar- talomhoz igazodó automatikus méretezés.

- Abszolút méretezés: fix méretek megadá- sa pixelben.

- Százalékalapú méretezés. Mindig az adott kijelző, ill. a rendelkezésre álló kép- ernyőfelülethez képest megadott méret, százalékos értékben kifejezve.

Néhány példa layout objektumok használatára.

Horizontális elrendezés

<s:layout><s:HorizontalLayout/>

</s:layout><s:Button label="Buttonl"/> <s:Button label="Button2"/> <s:Button label="Button3"/>

Button3Button2Button!

Page 105: Androidos szoftverfejlesztés

105Flex/ActionScript alapismeretek

Buttonl

Button2

Button3

Vertikális elrendezés

<s:layout><s:VerticalLayout/>

</s:layout><s:Button label="Buttonl"/> <s:Button label="Button2"/> <s:Button label="Button3"/>

Constraint-alapú elrendezés

<s:layout><s:BasicLayout/>

</s:layout>

<s:Button label="Buttonl" right="10" top="10"/> <s:Button label="Button2" horizontalCenter="0" top="60"/><s:Button label="Button" left=20״" top="120"/>

Buttonl

Button2

Button

Page 106: Androidos szoftverfejlesztés

3.2.3.2. Általános tulajdonságokA könyvünkben bemutatott vizuális Flex ve-

zérlőkhöz hozzárendelhetőek az alábbi tulaj- donságok.

IDEgyedi, szöveges azonosító, ezzel tudunk hi-

vatkozni a komponesre ActionScript és Flex forráskódban. Az elnevezések első karaktere kötelezően betű, a többi karakter lehet speciális karakter, illetve szám is pl.: ״ Gomb_01".

XKomponens vízszintes abszolút koordinátája,

pixelben megadva.

YA komponens függőleges abszolút koordiná-

tája, pixelben megadva.A 0,0 helyen levő X és Y koordináták mindig

a kijelző bal felső szélét jelentik. A koordináta- rendszer ún. jobbsodrású, azaz jobbra és lefelé növekednek az X és Y koordinátaértékek.

WidthA komponens szélessége, pixelben fixen,

vagy százalékosan megadva (pl.: 40%).

106_____________ Androidos szoftverfejlesztés alapfokon

Page 107: Androidos szoftverfejlesztés

107Flex/ActionScript alapismeretek

HeightA komponens magassága, pixelben fixen,

vagy százalékban megadva.

LeftA komponens állandó távolsága a tartalmazó

konténer (alapesetben a képernyő) bal oldalá- hoz képest, pixelben megadva. Felbontásfügget- len és relatív pozicionáláshoz használhatjuk.

RightA komponens állandó távolsága a tartalmazó

konténer (alapesetben a képernyő) jobb oldalá- hoz képest, pixelben megadva. Felbontásfüg- getlen és relatív pozicionáláshoz használhatjuk.

TopA komponens állandó távolsága a tartalmazó

konténer (alapesetben a képernyő) felső részé- hez képest, pixelben megadva. Felbontásfügget- len és relatív pozicionáláshoz használhatjuk.

BottomA komponens állandó távolsága a tartalmazó

konténer (alapesetben a képernyő) alsó részéhez képest, pixelben megadva. Felbontásfüggetlen és relatív pozicionáláshoz használhatjuk.

Page 108: Androidos szoftverfejlesztés

HorizontalCenterA komponens helyzete a képernyő, vagy a

tartalamzó konténer vízszintes középpontjához képest. Pozitív, vagy negatív, illetve nulla érté- két is felvehet. Nulla esetén abszolút vízszintes középre tájolást adhatunk meg.

VerticalCenterA komponens helyzete a képernyő, vagy a

tartalamzó konténer függőleges középpontjához képest. Pozitív, vagy negatív, illetve nulla érté- két is felvehet.

FontFamilyA szövegmegjelenítésre használt betűtípus

neve.

FontSizeA használt betűtípus mérete.

FontStyleA használt betűtípus stílusa. Lehetséges érté-

kei: normál, italic.

FontWeightA megjelenített szöveg vastagsága. Lehetsé-

ges értékei: normál, bőid.

108_____________ Androidos szoftverfejlesztés alapfokon

Page 109: Androidos szoftverfejlesztés

109Flex/ActionScript alapismeretek

LineThroughA megjelenített szöveg áthúzott megjeleníté-

se. Lehetséges értékei: true, false.

TextDecorationA megjelenített szöveg aláhúzott megjeleni-

tése. Lehetséges értékei: nőne, underline.

TextAlignA megjelenített szöveg vízszintes igazítása.

Lehetséges értékei: center, end, justify, left, right, start.

VerticalAlignA megjelenített szöveg függőleges igazítása.

Lehetséges értékei: bottom, justify, middle, top.Természetesen nem kötelező mindig az ősz-

szes tulajdonságot megadnunk. Egyes tulajdon- ságok egymás ellen is hathatnak, pl. a Left és az X tulajdonságok egyidejű használata ellenjavai- lőtt.

Példa egy erősen ״túldekorált" Label kompo­nensre:

Page 110: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon110

<s:Label id="Labell" x="10" y="20" width="217" height="46" fontFamily="Times New Román" fontSize="17" fontStyle="italic" fontWeight="normal" lineThrough="true" text="hello" textAlign="center" textDecoration="underline" verticalAlign="middle"/>

VisibleA komponens láthatóságát befolyásolhatjuk.

Lehetséges értékei: true, false.

3.2.3.3. A Label komponensA Label komponens statikus, azaz közvetle-

nül nem szerkeszthető szövegek megjelenítésére használható.

TextA szövegkomponens által megjelenített sző-

vég.

Példa:<s:Label id="Labell" x="10" y="20" text="hello"/>

3.2.3.4. A Button komponensNyomógomb, felhasználói interakció fogadá-

sára (valamilyen parancs kiadása, funkció akti- válása, stb.) használható.

Page 111: Androidos szoftverfejlesztés

111Flex/ActionScript alapismeretek

LabelA nyomógomb felirata.

EnabledAktívvá, vagy inaktívvá tehetjük a nyomó-

gombot. Inaktív állapotban kiszürkítve jelenik meg. Lehetséges értékei: true, false.

IconEgyedi képet jeleníthetünk meg a nyomó-

gombon. A következő képformátumok támoga- tottak: PNG, JPG, GIF, SWF, FXG.

Szabályozhatjuk, hogy a képfájlok az alkal- mazásba ágyazódjanak be, vagy különálló fájl- ként települjenek a kész alkalmazással. A két megoldás megadási módjára példák:

icon="@Embed('assets/kep.png')"icon="assets/kep.png"

3.2.3.5. A Textlnput komponensEgysoros szövegbevitelre alkalmas vezérlő.

TextA beviteli mező tartalma.

Page 112: Androidos szoftverfejlesztés

PromptEzzel a tulajdonsággal megadhatunk egy

szöveget, ami akkor jelenik meg, ha a beviteli mező teljesen üres.

maxCharsA beviteli mezőbe írható karakterek maximá-

lis számát korlátozhatjuk.

EnabledAktívvá, vagy inaktívvá tehetjük a kom-

ponenst. Inaktív állapotban kiszürkítve jelenik meg és nem lehetséges a szövegbevitel. Lehet- séges értékei: true, false.

3.2.3.6. A TextArea komponensTöbbsoros szövegbevitelre alkalmas kompo-

nens.

TextA beviteli mező tartalma.

PromptEzzel a tulajdonsággal megadhatunk egy

szöveget, ami akkor jelenik meg, ha a beviteli mező üres.

112_____________ Androidos szoftverfejlesztés alapfokon

Page 113: Androidos szoftverfejlesztés

113Flex/ActionScript alapismeretek

m axChars

A beviteli mezőbe írható karakterek maximá- lis számát korlátozhatjuk.

Editab le

A megjelenített szöveg módosíthatóságát szabályozhatjuk. Nem összekeverendő az Enabled tulajdonsággal! Lehetséges értékei: true, false.

Enabled

Aktívvá, vagy inaktívvá tehetjük a kompo- nenst. Inaktív állapotban kiszürkítve jelenik meg és nem lehetséges a szövegbevitel. Lehet- séges értékei: true, false.

3.3. Az ActionScript kód beágyazása Flex kódba

Flex alkalmazásunk forráskódjában eddig csak XML tag-eket adtunk meg, most megnéz- zük, hogyan kell elhelyezni ActionScript nyel- ven írt forráskódot Flex alkalmazás forráskódjá- bán.

Actionscript kódot a Flex névtérben meg- adott Script tag között kell megadnunk, egy speciális <![CDATA[ ... ]]> tag közé. A Flex innen

Page 114: Androidos szoftverfejlesztés

״ fogja tudni", hogy a CDATA-n belül megadott szöveg ActionScript forráskód.<fx:Script><![CDATA[

114_____________ Androidos szoftverfejlesztés alapfokon

//ActionScript kód helye

]]></fx:Script>

Page 115: Androidos szoftverfejlesztés

115Példaprogramok

4. Példaprogramok

Ebben és a következő fejezetben konkrét pél- dákat, komplett kisalkalmazásokat fogunk átte- kinteni.

Az alkalmazáskészítés alapfogásainak meg- ismerése során egyre bonyolultabb alkalmazá- sokat fogunk készíteni, míg végül eljutunk az adatbázis-kezeléshez.

Első lépésként a modern alkalmazásfejlesztés egyik alappillérét ismerjük meg, az eseményke- zelést.

4.1. Inicializációs függvény írásaEseménykezelés alatt - egyszerűen megfő-

galmazva - azt értjük, hogy egy program egy, a felhasználó, az operációs rendszer vagy saját maga által kiváltott esemény bekövetkeztekor valamit csinál. Esemény lehet egy nyomógomb lenyomása, egy hiba bekövetkezte stb.

Page 116: Androidos szoftverfejlesztés

Gyakori, hogy alkalmazásuk indításakor au- tematikusán inicializálni kell értékeket, beállítá- sokat, ellenőrzéseket kell elvégezni. Erre szolgál az alkalmazás applicationComplete nevű esemé- nye, mely akkor váltódik ki, ha az alkalmazás minden belső objektumot létrehozott, pl. a fel- használói felület elemeit. Az eseményhez egy ún. eseménykezelő függvényt fogunk készíteni.

Hozzunk létre egy új mobilprojektet 'Pelda2' néven!

Szükségünk lesz egy Textlnput komponensre, melynek neve (ID-ja) legyen 'beviteli_mezo', a mező Text tulajdonsága pedig a ״Szöveg" sző- veget tartalmazza!

A Flex forráskódban az Application tag-en belülre írjuk be: 'application' majd nyomjuk le a CTRL+SPACE billentyűkombinációt és válasz- szűk ki az applicationComplete listaelemet a fel- kínált lehetőségek közül. A Flash Builder ekkor felajánlja, hogy elkészíti számunkra az ese- ménykezelő metódust ('Generate Applica- tionComplete Handler’). Nyomjunk erre is ENTER-t. Megjelenik a generált metódus neve, amit rögtön írjunk is át 'init'-re!

116_____________ Androidos szoftverfejlesztés alapfokon

Page 117: Androidos szoftverfejlesztés

117Példaprogramok

A Flash Builder automatikusan létrehozta a metódus kódkeretét is egy ActionScript kód- blokkban. Ezenkívül Actionscript kódunk elejé- hez hozzáadta az import mx.events.FlexEvent;sort, mivel az eseménykezeléshez a FlexEvent osztályra van szükség.

Természetesen kézzel is beírhattuk volna mindezeket, de a Content Assist szolgáltatás segítségével jóval gyorsabban haladhatunk. Metódusunk fejléce:public function init(event:FlexEvent):void

A metódusnak átadott eseményosztály pél- dánya ('event') különböző értékeket kap az ese- mény bekövetkeztekor, melyeket feldolgozha- tünk a metódusban (példánkban erre nem lesz szükség).

A fenti lépésekkel elértük, hogy alkalmazá- sunk meghívja, azaz lefuttassa az ’init' metódust, amikor az elindul.

Hozzunk létre egy szöveges és egy decimális egész típusú változót a metódusunk törzsében!

var szoveg:String;

var szarmint;

Page 118: Androidos szoftverfejlesztés

Ezután adjunk értéket a két változónak! szam=5;szoveg="Kedvenc osztályzatom:" + szam.toString(lO);

A második sor némi magyarázatra szorul. A szám változót átalakítjuk szöveges adattá és ezt hozzáfűzzük a szöveg változó tartalmához. A konverzióhoz tulajdonképpen a szám objektum egyik metódusát hívtuk meg (.toString), ami sztringgé alakítja a tárolt számértéket (azaz az 5-öt). (Ne feledjük, hogy a String adattípus maga is osztály, mely rendelkezik metódusokkal!)

Utolsó lépésként a szöveg változónk tartalmát másoljuk a beviteli mezőbe:

beviteli_mezo.text=szoveg;

Példaprogramunk teljes forráskódja:

<?xml version="1.0" encoding="utf-8"?><s:Applicationxmlns:fx="http://ns.adobe.com/mxml/2009"xmlns:s="library://ns.adobe.com/flex/spark"applicationDPI="160"applicationComplete="init(event)">

<fx:Script><![CDATA[

118_____________ Androidos szoftverfejlesztés alapfokon

Page 119: Androidos szoftverfejlesztés

119Példaprogramok

import mx.events.FlexEvent;public function init(event:FlexEvent):void{var szoveg:String; var szam:int;

szam=5;szoveg="Kedvenc osztályzatom: " + szam.toString(lO);beviteli_mezo.text=szoveg;

}]]></fx:Script>

<s:Textlnput id="beviteli_mezo" left="10" right="10" top="50" width="100%" text=""/>

</s:Application>

Próbáljuk ki al- kalmazásunkat, fut- tassuk az alkalmazást szimulált módban (vagy mobileszközön, ha szeretnénk)! Ha mindent jól csináltuk, az alábbihoz hasonló eredményt kell kap- nunk:

H Pelda2-... - aDevice

Page 120: Androidos szoftverfejlesztés

4.2. Gomblenyomás kezeléseA nyomógombok fontos részei a felhasználói

felületeknek, ezért alapszintű kezelésükkel fisz- fában kell lennünk. Hozzunk létre egy új, 'Pelda3' nevű projektet! A felhasználói felület- hez először is hozzáadunk egy szövegbeviteli mezőt:

<s:Textlnput id="beviteli_mezo" left="10" right="10" to p - '30" text=""/>

Majd két nyomógombot:

<s:Button id="Gomb_Csokkent" left="10" top="100" width="80%" label="Csökkent"/>

<s:Button id="Gomb_Novel" le f t - '10" top="150" width="80%" label="Hozzáad"/>

A gombok lenyomásához funkciókat rende- lünk, ehhez külön függvényeket fogunk írni, melyek frissíteni fogják a szövegmező tartalmát.

Alkalmazásunkkal egy egész szám értékét növelhetjük/csökkenthetjük eggyel, 1-10-ig tér- jedő értékhatárok között. A szám értékét pedig meg is jelenítjük.

Az ehhez szükséges kódot ActionScript-ben írjuk meg. Az alkalmazáslogikát a 'Kivon' és 'Hozzáad' nevű függvények fogják tartalmazni:

120_____________ Androidos szoftverfejlesztés alapfokon

Page 121: Androidos szoftverfejlesztés

121Példaprogramok

protected function Kivon(event:MouseEvent):void{

if (szám == 1) return;—szám;szoveg="Szám értéke: "+szam.toString(10);

beviteli_mezo.text=szoveg;}

protected function Hozzaad(event:MouseEvent):void{

if (szám == 10) return;++szam;szoveg-'Szám értéke: "+szam.toString(10);

beviteli_mezo.text=szoveg;}

A Kivon függvény először is a szám változó értékét vizsgálja meg. Amennyiben ez 1, kilé- pünk a függvényből (return; utasítás). Ellenkező esetben a szám értékét csökkentjük eggyel és a már megismert módon frissítjük a szöveges mezőt.

A Hozzáad függvény is ugyanígy működik, csak éppen a felső értékhatár vizsgálatát és a szám értékének növelését tartalmazza.

Egy apró egyszerűsítést még el kell végez- nünk a forráskód szerkezetén. A szöveg és a szám változóink deklarációját helyezzük az init

Page 122: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon122

függvényen kívülre, így ״globális" Vátozókként használhatjuk őket. Az egyértelműség kedvéért a hozzáférési módként public-ot adjunk meg, így minden függvény/metódus számára elérhe- tőek lesznek.

public var szoveg:String; public var szanrint;

Utolsó lépésként pedig a függvényeket hoz- zárendeljük a nyomógombok ״kattintás" ese- ményéhez:

<s:Button id="Gomb_Csokkent" left="10" top="100" width="80%" label="Csökkent" click="Kivon(event)"/><s:Button id="Gomb_IMovel" left="10" top="150" width="80%" label="Hozzáad" click="Hozzaad(event)"/>

Programunk teljes forráskódja:<?xml version="1.0" encoding="utf-8"?><s :Applicationxmlns:fx="http://ns.adobe.com/mxml/2009"xmlns:s="library://ns.adobe.com/flex/spark"applicationDPI="160"applicationComplete="init(event)">

<fx:Script><![CDATAf

Page 123: Androidos szoftverfejlesztés

123

import mx.events.FlexEvent;

Példaprogramok____________

public var szoveg:String; public var szanrint;

protected function init(event:FlexEvent):void{szam=5;szoveg="A szám értéke: "+szam.toString(10); beviteli_mezo.text=szoveg;}protected function Kivon(event:MouseEvent):void{if (szám == 1) return;-szam;szoveg="A szám értéke: " +szam.toString(10); beviteli_mezo.text=szoveg;}protected function Flozzaad(event:MouseEvent):void{if (szám == 10) return;++szam;szoveg="A szám értéke: " +szam.toString(10); beviteli_mezo.text=szoveg;}]]></fx:Script>

<s:Textlnput id="beviteli_mezo" left="10" right="10" top="30" text=""/>

Page 124: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon1 2 4

<s:Button id="Gomb_Csokkent" left="10" top="100" width="8 0%" label="Csökkent" click="Kivon(event)"/>

<s:Button id="Gomb_Novel" left="10" top="150" width="80%" label="Hozzáad" click="Hozzaad(event)"/>

</s:Application>

Végezzünk el egy tesztfuttatást!

Page 125: Androidos szoftverfejlesztés

125Példaprogramok

4.3. Input-output események kezelése

Akármilyen külső erőforráshoz akarunk hozzáférni, különösen, ha hálózati erőforrásról van szó, nagyon fontos, hogy alkalmazásaink fel legyenek készítve arra az eshetőségre, ha az erőforráshoz, például egy szöveges fájlhoz, nem tudnak hozzáférni.

Mi a hibakezelésnek egy egyszerű, de haté- kony formájával fogunk megismerkedni. Az input-output (kivitel-bevitel) műveletek sikerte- lensége (és sikeressége is) ugyanis egy eseményt generál, aminek a kezelését alkalmazásszinten át tudjuk venni. A következő, 'Pelda4' nevű példaalkalmazás erre fog egy példát bemutatni. A program segítségével tetszőleges szövegalapú erőforrást tölthetünk be és jeleníthetünk meg. A tetszőleges itt tényleg szó szerint értendő: akár HTML weblapok elérhetőségét is megadhatjuk, ekkor a HTML forráskód fog megjelenni a prog- ramban.

Az alkalmazás szöveges alapú hálózati erő- forrásokat fog betölteni és megjeleníteni egy szövegmezőben. Kommunikációs hiba esetén hibaüzenetet jelenít meg. Az erőforrások URL-

Page 126: Androidos szoftverfejlesztés

jét egy szöveges beviteli mezőben adhatjuk meg.

A hálózati kommunikációhoz két Action- Script osztályt fogunk használni, melyek alap- esetben erőforrások betöltését teszik lehetővé:

URLRequest: ezzel az osztállyal adjuk meg az erőforrás helyét.

URLLoader: ez az osztály végzi el az erőfor- rás betöltését.

Az olvas_Loader nevű URLLoader osztálypél- dányt elég egyszer létrehozni, a program legele- jén.public var olvas_Loader:URLLoader = new URLLoader();

Az alkalmazás külön hibakezelő függ- vénnyel kezelni fogja a speciális, IOErrorEvent.lO_ERROR eseményt.

Az erőforrás sikeres betöltésének végén szín- tén egy esemény, az Event.COMPLETE fog kivál- tódni, ami a betöltési művelet sikeres befejeztét jelzi. Csak ezután szabad megkísérelni a betol- tött erőforrás feldolgozását.

126____________ Androidos szoftverfejlesztés alapfokon

Page 127: Androidos szoftverfejlesztés

127Példaprogramok

Mivel ActionScriptből közvetlenül akarunk eseményeket kezelni, ezért mindenképpen im- portálnunk kell a FlexEvent osztályt: import mx.events.FlexEvent;

A betöltés végének kezelése aszinkron mó- dón kell, hogy történjen. Ezért valójában két függvényre lesz szükségünk. Egyre a betöltés kezdeményezéséhez és egy másodikra a betol- tött adat feldolgozásához, ami esetünkben egy- szerű megjelenítést jelent majd. A második függvény csak akkor fog végrehajtódni, ha az első függvényben elindított betöltés sikeresen befejeződött.Két függvényünk neve ez lesz:

adat_olvas_kezdes

adat_olvas_befejezes

A függvények kódja:

public function adat_olvas_kezdes():void

{//URL átvétele a beviteli mezőből var olvas_URL:URLRequest= new URLRequest(beviteli_mezo.text);//az URL betöltésének indítása olvas_Loader.load(olvas_URL);}

Page 128: Androidos szoftverfejlesztés

public function adat_olvas_befejezes(e:Event):void{//a betöltött erőforrás megjelenítése kimenet.text=e.target.data;}

Az erőforrás tartalmát az adat_olvas_befejezes függvény egy Event objektumon keresztül kapja meg. Az objektum target.data tulajdonsága tar- talmazza magát az adatot (lásd fenti kódrészle- tét).

A felhasználói felületen egy egysoros sző- vegbeviteli mezőre, alatta két gombra, majd egy nagyobb méretű, többsoros szöveg megjeleníté- sére alkalmas szövegdobozra lesz szükségünk.

<s:Textlnput id="beviteii_mezo" left="10" right="10" top="10" horizontalCenter="0" prompt="írjon be egy adatot!" text="" textAlign="left"/>

<s:TextArea id="kimenet" left="10" right="10" top="160" bottom="10" height="100%" horizontalCenter="0"/>

<s:Button id="Gomb_olvasas" left="10" right="10" top="50" label="Olvasás" horizontalCenter="0"/>

<s:Button id="Gomb_Kilep" left="10" right="10" top="100" label="Kilépés" horizontalCenter="0"/>

128_____________Androidos szoftverfejlesztés alapfokon

Page 129: Androidos szoftverfejlesztés

129Példaprogramok

ActionScriptben eseményeket objektumok- hoz az alábbi két metódussal tudunk rendelni ill. eltávolítani:addEventListener(esemény, eseménykezelő Juggvény)

removeEventListener(esemény, eseménykezelő_függvény)

Alkalmazásunk indításakor egy inicializációs függvényt fogunk lefuttatni, mely elvégzi az eseménykezelők hozzárendelését az URLLoader objektumpéldányokhoz:

protected function init():void{0 lvas_L0 ader.addEventLístener(IOErrorEvent.lO_ERROR, IO_hiba);0 lvas_L0 ader.addEventListener(Event.COM PLETE,adat_olvas_befejezes);}

Amennyiben az erőforrás nem elérhető (pl. nincsen internetkapcsolat, vagy egyszerűen rossz linket adunk meg), akkor egy I0_ERR0R esemény generálódik. Ha ezt nem kezeljük, ak- kor alkalmazásunk mobileszközön futtatva jó eséllyel le fog állni, PC-n szimulálva pedig egy hibaüzenet fog megjelenni futtatáskor. Ezt a kellemetlenséget elkerülhetjük már azzal is, hogy egy megfelelő függvénnyel kezeljük ezt a

Page 130: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon130

hibaeseményt. Ez a függvény az I0_hiba lesz és egyszerűen egy üzenet ír ki a szövegdobozba, ha az erőforrás betöltése nem sikerült.public function IO_hiba(event:IOErrorEvent):void{kimenet.text="Hálózati kommunikációs hiba.";}

Már csak egy dolog van hátra: az alkalmazás rendeltetésszerű bezárásáért felelős függvény kódjának megírása. Az androidos alkalmazások ugyanis alapesetben nem állnak le a mobilesz- köz ״Vissza", vagy ״Home" gombjának lenyo- másakor, csupán a háttérbe kerülnek.Ezért a teljes leállítást mindig aNativeApplication.nativeApplication.exit();

utasítással kell elvégeznünk.A kilépés során eltávolítjuk az eseménykeze-

löket is:protected function Kilépés():void{0 lvas_L0 ader.rem0 veEventListener(Event.COMPLETE,adat_olvas_befejezes);

olvas_Loader.removeEventListener( IOErrorEvent.lO_ERROR, I0_hiba);

NativeApplication.nativeApplication.exit();}

Page 131: Androidos szoftverfejlesztés

131Példaprogramok

A teljes alkalmazás forráskódja:<?xml version="1.0" encoding="utf-8"?><s:Applicationxmlns:fx="http://ns.adobe.com/mxml/2009"xmlns:s="library://ns.adobe.com/flex/spark"applicationDPI="160"applicationComplete="init()">

<fx:Script><![CDATA[import mx.events.FlexEvent;

public var 01vas_L0ader:URLL0ader = new URLLoader();

protected function init():void{olvas_Loader.addEventListener(IOErrorEvent.lO_ER- ROR, IO_hiba);0 lvas_L0 ader.addEventListener(Event.COMPLETE,adat_olvas_befejezes);}protected function Kilépés():void{olvas_Loader.removeEventListener(Event.COMPLETE,adat_olvas_befejezes);

olvas_Loader.removeEventListener( IOErrorEvent.lO_ERROR, IO_hiba); NativeApplication.nativeApplication.exit();}public function IO_hiba(event:IOErrorEvent):void

Page 132: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon132

{kimenet.text="Hálózati kommunikációs hiba.";}public function adat_olvas_kezdes():void{//URL átvétele a beviteli mezőből var olvas_URL:URLRequest=new URLRequest(beviteli_mezo.text);//az URL betöltésének indítása olvas_Loader.load(olvas_URL);}public function adat_olvas_befejezes(e:Event):void{//a betöltött erőforrás megjelenítés kimenet.text=e.target.data;}

]]></fx:Script>

<s:Textlnput id="beviteli_mezo" left="10" right="10" top="10" horizontalCenter="0" prompt="írjon be egy adatot!" text="" textAlign=״left"/><s:TextArea id="kimenet" left="10" right="10" top="160" bottom="10" height="100%" horizontaiCenter="0"/><s:Button id - ,Gombjalvasas" left="10" right="10" top="50" label-'O lvasás" horizontalCenter-'O" click="adat_olvas_kezdes()"/>

Page 133: Androidos szoftverfejlesztés

133Példaprogramok

<s:Button id="Gomb_Kilep" left="10" right="10" top="100" label="Kilépés" horizontalCenter="0" c!ick="Kilepes()"/>

</s:Application>

Most pedig futtassuk alkalmazásunkat! Az alábbi képen az Adobe AIR rendszerköveteimé־ nyeit leíró oldal URL-jének tartalma látható egy hagyományos asztali böngészőprogramban.

« Manila Urétert«i *vfeaitt W«t ómé*** ·.'.<׳«tű it fftutt* í«»

□ Adobe AIR3 ־WUi-lnwi

• IJK ftb or fiwlír xK6-compalibU procMíor or Intel® Λ101»'1.601 ״ b or toiHer proeemr tor netbookt• M lw iM o fi* 'W tudsvm · XT H m m , P ro fn iio n j l, « · T A Ie t P C Ed ilion with S n v l t t Pack 3: \Vn14aw» S o rve r· 2003: W uilov.« .Hírre■ · 200#; W im low i VI«I«®

IIo iik Prémium. I Ju íii ir if , Ullimnlc, or Enlr1pri« t (inclualinf; 64-b íl « lilio m ) w illl Service P a d i 2; o r Wírulow *׳ י• 312MB of RAM (KíB rrcomiiKiul«))

I liül tnorr 5HH!«KJKÍ«!HO«3

Page 134: Androidos szoftverfejlesztés

Ugyanezt az URL-t megadva alkalmazd- sunknak, az betölti az oldal forráskódját:

134_____________ Androidos szoftverfejlesztés alapfokon

Pelda4-debugtaמDevice

Kilépés

<style> ui-dialog{background:#ee98ee,}</style><h1><img id="air_modal_image"src-'http://vwvwimages adobecom/www.adobe.com/downloadc enter/1mages/air/adobe_airjpg" width="244" height-‘45" alt="Adobe AIR" /></h1><h4 id="windows">Wíndows</h4><ul>

Page 135: Androidos szoftverfejlesztés

135Adatbázis-kezelő mobilalkalmazás készítése

5. Adatbázis-kezelő mobilalkalmazás készítése

Ez a fejezet egy demonstrációs célt szolgáló, de működő adatbázis-kezelő alkalmazás elké- szítését mutatja be.

Az alábbi ábra tervezett alkalmazásunk kommunikációs modelljét szemlélteti. Alapve- tőén egy írási és egy olvasási műveletet kell megvalósítanunk.

irá s^

1;lls1HV/.öS

O lvasás^

viíSJi ^____

A kihívás természetesen az, hogy a mobilal- kalmazásunk egészen a szerver MySQL szintjé- vei képes legyen kommunikálni, a többi rétegen keresztülhaladva és adatot is tudjon fogadni

/ 1 ץ Λ ,·־׳

PHPszkriplek

PHP Apacheszerver

MySQLszerve׳

\ י.....׳■ 'v . / V J \ /

onnan.

Page 136: Androidos szoftverfejlesztés

Alkalmazásunk egy DEMO_TABLA nevű adat- táblát fog tudni kezelni a 'test' nevű adatbázis- bán.

Az adattábla egyetlen adatmezővel fog ren- delkezni, melynek neve 'adatmező' és rövid szövegsorok tárolására lesz alkalmas.Az adatbázist létrehozó SQL lekérdezés:

CREATE TABLE 'test'.'DEMO_TABLA'('adatmező' VARCHAR(50) NŐT NULL);

5.1. Adatcsere PHP szkriptekkelA PHP szkriptek futtatását ActionScript

szintjén fogjuk kezdeményezni és ott is dolgoz- zuk fel a visszakapott eredményeket. Az adat- bázissal közvetlenül két PHP szkript fog kom- munikálni, az egyik olvasni fog az adatbázisból, a másik beírni fog az adatbázisba.

A mobilalkalmazásunk PHP szkripteknek fog tudni adatot átadni és értékeket fogadni azok kimenetéről. ActionScript-en keresztül elérhető a PHP szkriptek kimenete is (a print utasítások a php kódjában). Ez lehetővé teszi a műveletek sikerességének az ellenőrzését, ill. az adatbázisból kiolvasott adatok lekérését.

136_____________ Androidos szoftverfejlesztés alapfokon

Page 137: Androidos szoftverfejlesztés

Ahhoz, hogy befolyásunk legyen a PHP szkriptek által átadott adatok tartalmára, elő- szőr is azt kell tisztáznunk, hogy PHP szkripteknek hogyan lehet adatot átadni. Erre két módszer van: ún. GET és POST átadási mód. Mi ez utóbbit fogjuk használni, de szót ejtünk a GET-ről is, hogy átfogóbb képet kap- junk.

Hozzunk létre egy 'teszt_PHP_GET.php' szkriptet, melynek tartalma ez:

<?php$adat = $_GET["adat"];

print("$adat");print("<BR>");print("Rendben lefuttatva.");?>

A szkriptet böngészőben az alábbi sorral tud- juk lefuttatni:

http://localhost/teszt/teszt_PHP_GET.php?adat= tesztszöveg

A böngésző a következő szöveget jeleníti meg:

tesztszöveg Rendben lefuttatva.

Adatbázis-kezelő mobilalkalmazás készítése_________137

Page 138: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon138

GET módszerrel tehát egy ״?" jellel jelezzük, hogy adatot adunk át a szkriptnek, utána a szkriptben használt PHP változó nevét, majd tartalmát kell megadnunk. Egyszerre több ada- tót is átadhatunk, ilyenkor egy ״&" jelet kell az adatok közé írnunk. Például:

localhost/teszt/szkript.php?adatl=szövegl&adat2= szoveg2

A GET egyik legnagyobb hátránya, hogy korlátozott mennyiségű adatot lehet vele elkül- deni. Ez szerveroldali beállítástól is függ, de általában kb. 2000 bájtnál nem lehet több.

A POST típusú adatátadásnál ilyen megköté- sek nincsenek és szerencsére a fenti szkriptet sem kell teljesen átírni. Lényegében csak a 'GET' szót kell 'POST'-ra kicserélni a szkript szövegé- ben (pl. 'tesztJPHPPOST.php').

<?php$adat = $_POST["adat"];print("$adat");print("<BR>");print("Rendben lefuttatva.");?>

A POST paraméterek átadásáról a hívó al- kalmazásnak/weboldalnak kell alkalmazáslogi­

Page 139: Androidos szoftverfejlesztés

ka szintjén gondoskodnia. Ennek a technikáját fogjuk most megismerni.

Adatbázis-kezelő mobilalkalmazás készítése_________139

5.2. Adatbázis-kezelő PHP szkriptek megírása

Négyféle adatra van szükség a szkriptekhez: a hőst nevére (ami tesztkörnyezetben 'localhost', éles alkalmazás esetén a megfelelő szervemév, ill. külső szolgáltató esetén a szolgáltató adja meg a nevet), egy felhasználói név és jelszó páros az adatbázishoz/adattáblához, valamint a bemenő adat (ez csak az adatbázisba történő íráshoz kell).

Az első szkriptünk neve 'olvas.php', ezzel fo- gunk olvasni az adatbázisból.

<?php$hostname='localhost';$nev-név';$jelszo='XYZ';

if (!$kapcsolat = @mysql_connect($hostname, $nev, $jelszo)) {die(print("Adatbázishiba: nincs kapcsolat."));} mysql_set_charset('utf8',$kapcsolat);

if (lmysql_select_db('test',$kapcsolat)) {die(print("Adatbázishiba: nincs adattábla."));}

$parancs = "select * from demo_tabla";

Page 140: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon140

if(!$eredmeny = mysql_query($parancs, $kapcsolat)) {die(print("Adatbázishiba: lekérdezési hiba."));}

while($row=mysql_fetch_array($eredmeny,MYSQL_ASSOC)){$adatmezo=$row['adatmezo']; print("$adatmezo"); print("<BR>");}mysql_close($kapcsolat);?>

A szkript először létrehozza az adatbázis- kapcsolatot, majd az 'UTF-8' karakterkódolást állítja be, ezzel biztosítva a megfelelő karakter- megjelenítést.

Második lépésként a szkript a DEMO_TABLA adattáblát választja ki munka- táblának.

Egy $parancs nevű változóban tároljuk a le- kérdezést, amit a mysql_query függvénnyel haj- tünk végre.

A szkript ezután egy ciklus segítségével el- kezdi folyamatosan kiolvasni és kiírni a sorokat az adattáblából.

Utolsó lépésként az adatbázis lezárására is sor kerül.

Page 141: Androidos szoftverfejlesztés

141Adatbázis-kezelő mobilalkalmazás készítése

Bármilyen hiba esetén a szkript hibaüzenetet ír ki és befejezi működését.

Most pedig lássuk az adattáblába történő be- írás szkriptjét, melynek neve 'kiir.php':

<?php$hostname='localhost';$nev-név';$jelszo='XYZ';$adat = $_POST["adat"];

if (l$kapcsolat = @mysql_connect($hostname, $nev, $jelszo)) {die(print("Adatbázishiba: nincs kapcsolat."));} mysql_set_charset(ütf8'׳ $kapcsolat);

if (lmysql_select_db("test",$kapcsolat)) {die(print("Adatbázishiba: nincs adattábla."));}

$parancs = "INSERT INTŐ demo_tabla VALUES ('".$adat."')";if(!$eredmeny = mysql_query($parancs, $kapcsolat)) {die(print("Adatbázishiba: lekérdezési hiba."));}

mysql_close($kapcsolat);

print("Sikeres adatkiírás!");?>

A szkriptben megtörténik az elküldött be- menő adat feldolgozása is, erre az $adat nevű változót használjuk.

Page 142: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon142

Megjegyzés:Régebbi MySQL verzióknál előfordulhat, hogy nem támogatják a mysql_set_charset függvényt.

5.3. PHP szkriptek kezelése ActionScript-ből

PHP szkriptjeink futtatásához az előző feje- zetben megismert alábbi két osztályt fogjuk használni:URLRequest: ezzel az osztállyal adjuk meg a

szkriptek URL-jét és az átadni kívánt adató- kát.

URLLoader: ez az osztály végzi el a PHP szkriptek lefuttatását.Az implementálás során három nehézséggel

kell megbirkóznunk:- Szkriptfuttatás ellenőrizhetősége- Aszinkron feldolgozás biztosítása- Karakterkódolás

5.3.1. Szkriptfuttatás ellenőrizhetőségeFelmerül a kérdés, hogy az ActionScript

program honnan fogja tudni, hogy végrehajtó- dott-e a PHP szkript? Ezt eseménykezelésen keresztül lehet megvalósítani. Legalább három­

Page 143: Androidos szoftverfejlesztés

féle eseményre fel kell készítenünk programún- kát:- a PHP szkript futtatása sikeres volt- a futtatás során valamilyen hiba lépett fel- a PHP szkript fizikailag nem volt elérhető.

5.3.2. Aszinkron feldolgozás biztosításaA dolgokat tovább bonyolítja, hogy egy távo-

li szkript elérése, lefutása, majd a futás eredmé- nyének visszajelzése akár több másodpercet is igénybe vehet. Ezalatt az idő alatt programunk futása már régen ״máshol" járhat. A szkriptek kezelését ezért aszinkron módon kell megváló- sí tani. Szerencsére ennek a mikéntjét már meg- ismertük, ezt figyelembe véve készítettük el a 'Pelda4' alkalmazásunkat is.

5.3.3. KarakterkódolásA helyes karakterkódolás alapvető fontossá-

gú az adatcsere folyamán. A leggyakoribb, már- már klasszikusnak nevezhető probléma az éke- zetes karakterek megjelenítésénél merül fel. Szerveroldalon, PHP szkriptjeinkkel hiába állí- tünk be UTF-8 kódolást az adatbázisban tárolt adatok kezeléséhez, számos más szerver- és

Adatbázis-kezelő mobilalkalmazás készítése________ 143

Page 144: Androidos szoftverfejlesztés

kliensoldali beállítás következtében az ered- meny még ekkor is eltérhet a remélttől.

Helyes módszer lehet, ha az ékezetes karak- tereket eleve HTML kódokká alakítva tároljuk az adatbázisban és kiolvasáskor visszaalakítjuk azokat. Erre a PHP is lehetőséget biztosít.

Az ékezetes karakterek dilemmája mellett keresztplatformos megoldásoknál az ún. újsor karakterek tárolásának problémája is felmerül- hét, a UNIX és a Windows ugyanis nem ugyan- úgy tárolja az új sort jelző karaktert.

A szerveroldalon alkalmazott http szerver továbbá küldhet járulékos adatokat (pl. jelzőka- rakterek formájában) a PHP szkriptek kimenete elé biggyesztve. Ezekre a kódolási nehézségekre itt most csak utalunk, mindössze azt kívánjuk tudatosítani, hogy mindig nagyon alaposan teszteljük a kommunikációs rendszer minden egyes rétegét!

Hozzunk létre a Flash Builderben egy új, 'Pelda5' nevű projektet! Az alkalmazás elkészí- tése előtt be kell állítanunk az alkalmazott szer- ver technológiát. Ezt a későbbiekben is bármikor megtehetjük a Project —* Properties —> Flex Ser- ver menüben.

144_____________ Androidos szoftverfejlesztés alapfokon

Page 145: Androidos szoftverfejlesztés

145Adatbázis-kezelő mobilalkalmazás készítése

Ügyeljünk arra, hogy a Flash Builder-t ebben az esetben rendszergazdai jogosultságokkal futtassuk, mivel rendszermappához állítunk be hozzáférést. Máskülönben a Flash Builder meg fogja tagadni a beállítás elvégzését.

US New Fiex Mobile Project - ° B I

C n n fiiju re S e rve r S c tt in g s |r־ÜÉÉ

Φ The web ׳ oot folder and root LRL are valid. Θ !

Project Location Mobile Settings Server Settings > Build Path5 >

Server technoi ogy

Application server type: PHP *׳ :

V ; Use; ceroow objícjteeíess· servj־»׳é

' ; . Qata Services ׳ .BlazcOS.׳ ׳ :.:oldFusion Hash Remet ng

Q team more about configunna a Flex project to wprk with vour server technoloav.

Server location

Jtfeb rooi C:\Program Files (x86)\Apache Group\Apache2\htdocs growse.

RootURL: h l־.p://'ocalhost

Rxample: http://localhost

Vaidnte tionhguration

Compiled Flex application locationThls folder will be outside your project folder.

(?) < gack íjext > j M Cancel

Az 'Application server type' opciónál válasz- szűk ki a PHP-t!

Page 146: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon146

A 'Web root' és 'Root URL' megadása szintén kötelező. Itt a webszerverünk elérhetőségét kell megadnunk.

Lokális szerverhasználat (pl. fejlesztés alatt, teszteléskor) esetén a 'Web root' értéke ehhez hasonló lesz:

C:\Program Files (x86)\Apache Group\Apache2\htdocs

A 'Root URL' pedig:http://localhost

Végezetül a 'Validate configuration' gombra kattintva ellenőriztetnünk kell a szerver elérhe- tőségét. A Flash Builder csak sikeres érvényes!- tés után hajlandó elmenteni a beállításokat. Az Apache szervernek feltétlenül futnia kell.

Megjegyzés: Az éles alkalmazás publikálá- sakor / tesztelésekor a FlashBuilder kérheti a szerver elérhetőségének módosítását a lokális adatokról (amennyiben lokálisan teszteltük al- kalmazásunkat) a hálózati adatokra. A tapaszta- lat azt mutatja, hogy ennek a beállításnak az elvégzése nem kötelező, az éles alkalmazás ugyanolyan jól működik a fenti lokális beállítá- sokkal is.

Page 147: Androidos szoftverfejlesztés

147Adatbázis-kezelő mobilalkalmazás készítése

Alkalmazásunk felületén két szöveges bevi- teli mezőre és három nyomógombra lesz szűk- ségünk, az alábbi elrendezésben.

A legfelső komponens egy Textlnput kom- ponens lesz, ide írhatjuk majd be az adatbázisba felvinni kívánt adatokat. Itt egysoros szövegeket tudunk megadni. A komponens ID-ja legyen 'beviteli mező'!

Page 148: Androidos szoftverfejlesztés

Az 'Kiírás' feliratú nyomógomb segítségével küldhetjük el az adatokat az adatbázisba, míg az 'Olvasás' feliratú gombbal az adattáblánk tartalmát (az összes adatsort) beolvashatjuk az alkalmazásunkba, amit egy TextArea kompo- nenssel fogunk megjeleníteni, melynek ID-ja 'Kimenet' legyen! Ezt a PHP szkript kimenetének megjelenítésére fogjuk használni.

A 'Kilépés' feliratú nyomógombot az alkal- mazás rendeltetésszerű bezárására használhat- juk.

Próbáljuk meg egyedül beállítani a kompo- nensek left, right, top, bottom, width és height tulajdonságait úgy, hogy különböző felbontá- sokkal és tájolással is megfelelően és ízlésesen jelenjenek meg!

Arra az esetre, ha valahol elakadna az Olva- só, az alábbi kódrészletekből lehet puskázni:

<s:Textlnput id="beviteli_mezo" top="8" left="10" right="10" horizontalCenter-Ό" prompt-'írjon be egy adatot!" text="" textAlign="left"/>

<s:Button id="Gomb_kiiras" top="48" left="10" right="10" label-'Kiírás" click="adat_kiir_kezdes()" horizontalCenter="0"/>

148_____________ Androidos szoftverfejlesztés alapfokon

Page 149: Androidos szoftverfejlesztés

149Adatbázis-kezelő mobilalkalmazás készítése

<s:TextArea id="kimenet" left="10" right="10" top="195" bottom="10'' horizontalCenter="0"/>

<s:Button id="Gomb_olvasas" top="96" left="10" right="10" label="Olvasás" horizontalCenter="0" click="adat_olvas_kezdes()"/>

<s:Button id="Gomb_Kilep" top="144" left="10" right="10" label="Kilépés" horizontalCenter="0" click="Kilepes()"/>

A rend kedvéért adhatunk a nyomógombok- nak is ID-t, de példánkban ez akár el is hagyha- tó, mivel nem hivatkozunk rájuk ActionScript- bői.

Mivel alkalmazásunk eseményeket is kezel, ezért nagyon fontos, hogy forráskódunk legele- jén importáljuk a megfelelő osztályokat, ameny- nyiben a FlashBuilder ezt nem tette meg autó- matikusan.import mx.events.FlexEvent;

Szükségünk lesz egy speciális 'adatok' nevű objektumra, ennek segítségével fogjuk átadni az adatokat a PHP szkripteknek. Ez egy speciális, URLVariables típusú objektum lesz, melynek adattagjai dinamikusan jönnek létre (pár sorral lentebb látni fogjuk, hogyan).

Page 150: Androidos szoftverfejlesztés

Az adatok objektum információhordozó adat- tagját ugyanolyan néven kell létrehozni, mint a PHP szkriptben megadott, POST metódussal beolvasott változó neve. Esetünkben ez az adat nevű adattag lesz ActionScriptben: ez fog a PHP szkriptben mint $adat megjelenni. Először hoz- zuk létre az objektumot!

public var adatok:URLVariables= new URLVariables{);

A PHP szkriptjeink helyét két URLRequest objektummal adjuk meg. Mivel ezek nem vál- toznak a program futása során, nyugodtan glo- bális objektumokként is használhatjuk őket, a függvényeken kívül.public var olvas_URL:URLRequest=new URLRequest("http://localhost/olvas.php");

public var kiir_URL:URLRequest=new URLRequest("http://localhost/kiir.php");

Ennek megfelelően a szkripteket végrehajtó objektumokból is kettőre lesz szükségünk:public var olvas_Loader:URLLoader = new URLLoader(); public var kiir_Loader:URLLoader = new URLLoader();

Ez az alkalmazás is rendelkezni fog egy inicializációs függvénnyel, melyben a szkriptek feldolgozásáért felelős függvényeket rendeljük a

150_____________ Androidos szoftverfejlesztés alapfokon

Page 151: Androidos szoftverfejlesztés

151Adatbázis-kezelő mobilalkalmazás készítése

megfelelő eseményekhez. Itt adjuk meg explicit módon az adatátadás módját is a PHP szkrip- teknek (POST típusú feldolgozás).

protected function init():void { olvas_URL.method=URLRequestMethod.POST;

kiir_URL.method=URLRequestMethod.POST;olvas_Loader.addEventListener(IOErrorEvent.lO_ER- ROR, IO_hiba);

kiir_Loader.addEventListener(IOErrorEvent.lO_ERROR,lOhiba);olvas_Loader.addEventListener(Event.COMPLETE,a-dat_olvas_befejezes);kiir_Loader.addEventListener(Event.COMPLETE,a-dat_kiir_befejezes);}

Amennyiben a szkriptek nem elérhetőek (pl. nincsen internetkapcsolat), akkor egy IO_ERROR esemény generálódik, amit az IO_hiba függvény fog kezelni. A függvény kódja nagyon egyszerű, egyszerűen kiírunk egy hibaüzenetet a ״kimene- ti" szövegdobozunkba, akárcsak az előző fejezet példaalkalmazásánál.

public function IO_hiba(event:IOErrorEvent):void{kimenet.text-'Hálózati kommunikációs hiba.";}

Page 152: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon152

A szkriptek futtatásának végén pedig szintén egy-egy esemény, nevezetesen az Event.COMP- LETE fog kiváltódni, ami a szkript feldolgozásá- nak sikeres végét jelenti.

Figyelem: Ez nem feltétlenül jelenti a szkriptben leírt műveletek sikerességét is! Csu- pán arról van szó, hogy a szkript végrehajtását a szerver befejezte. A szkripten belüli műveletek ellenőrzéséről a szkript által visszaadott infor- mációk feldolgozásával gondoskodhatunk.

A PHP szkriptek feldolgozása az URLRequest és URLLoader objektumokkal aszinkron módon kell, hogy történjen. Ezért mindkét szkriptünk futtatásához ismét két-két függvényre lesz szűk- ségünk. Egyre a szkriptfuttatás kezdeményezé- séhez és egyre a futtatás eredményének a fel- dolgozásához.public function adat_olvas_kezdes():void

{olvas_Loader.load(olvas_URL);

}public function adat_olvas_befejezes(e:Event):void{

kimenet.text=e.target.data;}

public function adat_kiir_kezdes():void

Page 153: Androidos szoftverfejlesztés

153Adatbázis-kezelő mobilalkalmazás készítése

{if(beviteli_mezo.text =="") return; adatok.adat=beviteli_mezo.text; kiir_URL.data=:adatok; kiir_Loader.load(kiir_URL);

}public function adat_kiir_befejezes(e:Event):void{

kimenet.text=e.target.data;}

Az adat_olvas_kezdes() függvény egyszerűen csak futtatási kérést küld a szerverhez. Mivel az olvas.php szkript nem igényel átadott adatot, ezért elég, ha csak lefuttatjuk a szkriptet a szer- vérén.

Az adat_olvas_befejezes() függvény, ami a szkript lefutásakor hívódik meg, a kimeneti szövegmezőben megjeleníti a szkript kimenetét. A kimenetet a függvénynek átadott ״e" párámé- tér (eseményobjektum) e.target.data adattagja tartalmazza. Ez alapértelmezés szerint szöveges formátumú adat. így, amennyiben a szkript futtatása alatt hiba következik be, akkor a hiba- üzenet (melyeket a PHP szkriptjeinkben imple- mentáltunk az 5.2-es fejezetben) is ugyanitt fog megjelenni.

Page 154: Androidos szoftverfejlesztés

Lényegében az adat_kiir_kezdes() és adat_kiir_befejezes() függvénypáros is hasonlóan működik. Az első függvényben ellenőrizzük, hogy üres-e a beviteli mező. Üres szöveget az alkalmazás nem enged elküldeni. Továbbá meg kell határoznunk a szkriptnek átadott adatokat. Ezt az alábbi két utasítás végzi el:adatok.adat=beviteli_mezo.text;kiir_URL.data=adatok;

Ekkor jön létre, kvázi dinamikusan az adatok objektum adat nevű adattagja.

Külön hibakezelést nem végeznek a szkriptek kimeneteit feldolgozó függvényeink, példaprogramunkban bőségesen elegendő, ha csak kiírjuk a szkriptek által visszaadott adató- kát. Bonyolultabb alkalmazásoknál ennél termé- szetesen kifinomultabb hibakezelésekre is szűk- ség lehet.

Az alkalmazást az alábbi függvénnyel zárjuk be:protected function Kilepes():void

{olvas_Loader.removeEventListener(Event.COMP-LETE,adat_olvas_befejezes);kiir_Loader.removeEventListener(Event.COMPLE-TE,adat_kiir_befejezes);

154_____________ Androidos szoftverfejlesztés alapfokon

Page 155: Androidos szoftverfejlesztés

155Adatbázis-kezelő mobilalkalmazás készítése

olvas_Loader.removeEventListener(IOErrorE- vent.lOJERROR, IO_hiba);kiir_Loader.removeEventListener(IOErrorEvent.lO_ER- ROR, lO hiba);

NativeApplication.nativeApplication.exit();}

Az alkalmazás teljes forráskódja:<?xml version="1.0" encoding="utf-8"?><s:Applicationxmlns:fx="http://ns.adobe.com/mxml/2009"

xmlns:s="library://ns.adobe.com/flex/spark"applicationDPI="160"applicationComplete="init()">

<fx:Script><![CDATA[import mx.events.FlexEvent;

public var adatok:URLVariables= new URLVariables(); //változók a PHP szkripteknek

public var olvas_URL:URLRequest=new URLRequest("http://localhost/teszt/olvas.php");

public var kiir_URL:URLRequest=new URLRequest("http://localhost/teszt/kiir.php");

public var olvas_Loader:URLLoader = new URLLoader();

public var kiir_Loader:URLLoader = new URLLoader();

Page 156: Androidos szoftverfejlesztés

protected function init():void{olvas_URL.method=URLRequestMethod.POST;

kiir_URL.method=URLRequestMethod.POST; olvas_Loader.addEventListener(IOErrorE- vent.lO_ERROR, IO_hiba);kiir_Loader.addEventListener(IOErrorEvent.lO_ERROR,IO_hiba);olvas_Loader.addEventListener(Event.COMP-LETE,adat_olvas_befejezes);kiir_Loader.addEventListener(Event.COMPLETE,a-dat_kiir_befejezes);}

protected function Kilepes():void{olvas_Loader.removeEventListener(Event.COMP-LETE,adat_olvas_befejezes);kiir_Loader.removeEventListener(Event.COMPLETE,a-dat_kiir_befejezes);olvas_Loader.removeEventListener(IOEr- rorEvent.lOJERROR, IO_hiba); kiir_Loader.removeEventListener(IOErrorE- vent,IO_ERROR, IO_hiba);

NativeApplication.nativeApplication.exit();}

156____________Androidos szoftverfejlesztés alapfokon

Page 157: Androidos szoftverfejlesztés

157

public function IO_hiba(event:IOErrorEvent):void{kimenet.text="Hálózati kommunikációs hiba.";

Adatbázis-kezelő mobilalkalmazás készítése_______

public function adat_olvas_kezdes():void{olvas_Loader.load(olvas_URL);}public function adat_olvas_befejezes(e:Event):void{kimenet.text=e.target.data;}public function adat_kiir_kezdes():void{if(beviteli_mezo.text == "") return; adatok.adat=beviteli_mezo.text; kiir_URL.data=adatok; kiir_Loader.load(kiir_URL);}public function adat_kiir_befejezes(e:Event):void{kimenet.text=e.target.data;}

]]></fx:Script>

Page 158: Androidos szoftverfejlesztés

<s:Textlnput id="beviteli_mezo" top="10" left="10" right="10" horizonta!Center="0" prompt="írjon be egy adatot!" text-textA lign= "left"/>

<s:Button id="Gomb_kiiras" top="50" left="10" right="10" label="Kiírás" click="adat_kiir_kezdes()" horizontalCenter="0"/>

<s:TextArea id="kimenet" left="10" right="10" top="200" bottom="10" horizontalCenter="0"/>

<s:Button id="Gomb_olvasas" top="100" left="10" right="10" label="Olvasás" horizontalCenter="0" click="adat_plvas_kezdes()"/>

<s:Button id="Gomb_Kilep" top="150" left="10" right="10" label="Kilépés" horizontalCenter="0" click="Kilepes()"/>

</s:Application>

Teszteljük alkalmazásunkat! Figyeljünk a következőkre:• A három alapfunkció működik-e:

o kiíráso olvasás o kilépés.

• Az adatbeírásokat lekérdezésekkel ellenőriz- zük az adatbázisban is!

• A szkriptek összes lehetséges kimenete meg- jelenik-e a szövegdobozban?

158_____________ Androidos szoftverfejlesztés alapfokon

Page 159: Androidos szoftverfejlesztés

159Adatbázis-kezelő mobilalkalmazás készítése

• Állítsunk elő mesterségesen hibahelyzeteket! Állítsuk le az Apache szervert, vagy a MySQL szolgáltatást és nézzünk meg, hogy a megfelelő hibaüzenetek megjelennek-e olva- sáskor, és/vagy kiíráskor!

Page 160: Androidos szoftverfejlesztés

5 4 Az alkalmazás éles üzembe .־helyezése

Ha minden megfelelően működik, az elké- szült alkalmazást publikálhatjuk és az elkészült .APK kiterjesztésű telepítőcsomagot akár el is küldhetjük barátainknak, ismerőseinknek, illet- ve közzétehetjük a megfelelő webáruházban is.

Éles, online környezet használatakor ne te- lejtsük el az online szerveren is létrehozni a megfelelő adatbázist és adattáblát, valamint a PHP szkripteket elhelyezni (tippekért ld. 1. feje- zetet).

160_____________ Androidos szoftverfejlesztés alapfokon

Page 161: Androidos szoftverfejlesztés

161Receptek haladóknak

6. Receptek haladóknak

Akik már elkészítették első alkalmazásaikat, azok számára ebben a fejezetben néhány "ins- tant" kódreceptet tartogatunk.

Ezek még színesebbé (szó szerint is) tehetik alkalmazásainkat és az AIR további önálló fel- fedezésére ösztönöznek.

6.1. Háttérszín megváltoztatásaAz alkalmazás háttérszíne alapesetben teke-

te, de ezt megváltoztathatjuk a Flex kód kezdő <s:Apllication> tagjének kiegészítésével.

A backgroundColor tulajdonság egy hexade- cimális színértéket vehet fel (sorrendben a vö- rös, zöld és kék színértékeket megadva).

Az alábbi példában háttérszínnek a 00AA00 értéket adjuk meg, ami egy élénkzöld szín kód- ja.

Page 162: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon162

<s:Applicationxmlns:fx="http://ns.adobe.com/mxml/2009"

xmlns:s="library://ns.adobe.com/flex/spark" applicationDPI="160"

backgroundColor="#OOAAOO">

6.2. Betöltőkép megjelenítéseAz ún. 'Splash Screen' az alkalmazás betöltő-

désekor látható, általában egy lógót, az alkal- mazás nevét stb. szokták így megjeleníteni.

Splash képet a Flex kód kezdő <s:Apllication> kódblokkjában adhatunk meg.

Háromféle tulajdonság tartozik a Splash képernyőkhöz.

SplashScreenlmage: A kép erőforrásfájl neve. Egy @Embed('kép/á/7_ne1/e') kifejezéssel hozzá kell csatolnunk az alkalmazásunkhoz.

SplashScreenScaleMode: a képarányok meg- jelenítésének módja. Négyféle értéke lehet: nőne, letterbox, stretch, zoom. A két leggya- koribb talán a letterbox és a stretch. Előbbi esetén az eredeti képarányok mindenképpen megmaradnak, viszont lehet, hogy a kép nem

Page 163: Androidos szoftverfejlesztés

163Receptek haladóknak

tölti ki teljesen a képernyőt. Utóbbi esetében a képernyő kitöltése garantált, viszont a képará- nyok torzulhatnak. Ha a kép kisebb, mint a képernyő mérete, a zoom értékkel annyira felna- gyítódik a kép, hogy kitöltse a teljes képernyőt.

SplashScreenMinimumDisplayTime:millimásodpercben megadhatjuk, hogy mennyi ideig legyen látható a betöltőkép.

Az alábbi kóddal a splash_screen.png képfájl jelenik meg az alkalmazás betöltésekor, 1 má- sodpercen keresztül.

<s:Applicationxm lns:fx-'http://ns.adobe.com/mxml/2009'' xmlns:s="library://ns.adobe.com/flex/spark" applicationDPI="160"splashScreenlmage="@Embed('src/splash_screen.png')" splashScreenScaleMode-,letterbox" SplashScreenMinimumDisplayTime-'1000">

Page 164: Androidos szoftverfejlesztés

6.3. Statikus képek megjelenítéseAz Image komponenssel képeket jeleníthe-

tünk meg alkalmazásainkban.Választhatunk, hogy a képfájl külön fájlként

töltődjön be, vagy az alkalmazásba legyen be- ágyazva. Utóbbi esetben az Embed kulcsszót kell használnunk.

164_____________ Androidos szoftverfejlesztés alapfokon

Amennyiben a width és/vagy height tulajdon- Ságokat is megadjuk, a komponens scaleMode tulajdonságával megszabhatjuk a kép megjele­

Page 165: Androidos szoftverfejlesztés

165Receptek haladóknak

nését. Háromféle értéket vehet fel: letterbox, stretch, zoom, melyek a képnek a számára meg- adott területen történő megjelenését befolyásol- ják.

Példák:

<s:!mage x="40" y="40" source="duck.png"/>

<s:lmage x="40" y="40" width="237"scaleMode="letterbox"source="@Embed('duck.png')"/>

6.4. Képernyő méreteinek lekérdezése

Szükségünk lehet a képernyő méreteinek le- kérdezésére is.

A használt eszköz képernyőfelbontásának lekérdezése nagyon egyszerű. Az alkalmazás felületének (az AIR fogalomrendszerében ezt stage-nek hívják) két tulajdonságát kell csupán lekérdeznünk, melyek ״ automatikusan" tártál- mázzák az értékeket.

A vízszintes és a függőleges képernyőfelbon- fást a stage.width és a stage.height tartalmazza. Ezek decimális egész értékek (int).

Page 166: Androidos szoftverfejlesztés

Ezeket a tulajdonságokat az ActionScript kód bármely részén lekérdezhetjük.

6.5. Képernyőtájolás kezeléseA képernyőforgatás kezelésére kétféle mód-

szer is rendelkezésre áll.Az első, egyszerűbb megoldással az alkal-

mazásunk tájolását előre megszabhatjuk. Ehhez elég az -app.xml alkalmazásleíró fájlt módosíta- nunk. Két bejegyzés fontos számunkra:

<autoOrientsx/autoOrients>True, vagy fa lse értéket megadva befolyásol-

hatjuk, hogy a készülék elforgatásakor kérjük-e, hogy a képernyőtartalom is átrendeződjön, vagy sem.

<aspectRatiox/aspectRatio>Portrait, vagy Landscape értéket megadva az

alkalmazásunk alapértelmezett képernyő-elfor- gatását adhatjuk meg.

Természetesen mindkét érték beállításának csak az alkalmazásunkra lesz hatása.

A második módszerrel ActionScript kódból kezeljük a képernyőtájolást.

166_____________ Androidos szoftverfejlesztés alapfokon

Page 167: Androidos szoftverfejlesztés

167Receptek haladóknak

Ehhez szintén a Stage osztályt használjuk, mégpedig a setAspectRatio metódusát.

A két lehetséges képernyőtájolás beállítása a következőképpen történhet:

stage.setAspectRatio(StageAspectRatio.PORTRAIT);

stage.setAspectRatio(StageAspectRatio.LANDSCAPE);

6.6. Teljesképernyős üzemmódAlkalmazásunk megjelenítését szükség ese-

tén teljesképernyős üzemmódba is állíthatjuk. Teljesképernyős üzemmód alatt azt kell érteni, hogy alkalmazásunk felülete kitakarja a mobil- eszköz kijelzőjének alsó (vagy felső) részén ta- lálható státuszsort is (ebben a sorban jelenik meg pl. az akkumulátor töltöttségi szintje, az idő stb.).

Az üzemmódváltáshoz az alapértelmezetten rendelkezésre álló stage osztály displayState tu- lajdonságát kell módosítanunk.

Az alábbi utasítással teljesképernyős módra váltunk:stage.displayState=StageDisplayState.FULL_SCREEN;

Page 168: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon168

Ebben az esetben a billentyűzet interaktivitás kikapcsolt állapotba kerül. Ha az Android vir- tuális billentyűzetét teljesképernyős módban is elérhetővé akarjuk tenni, a következő módon váltsunk teljes képernyőre:stage.displayState=StageDisplayState.FULL_SCREEN_INTERACTIVE;

A teljesképernyős megjelenítésről a követke- zőképpen válthatunk vissza normál képernyő- módba:stage.displayState=StageDisplayState. NORMÁL;

6.7. SMS küldés kezdeményezéseAmennyiben mobileszközünk SMS küldését

is támogatja, egyszerűen felhívhatjuk az alapér- telmezett SMS-küldő szoftvert, sőt, még a cím- zett telefonszámot is megadhatjuk.

Ehhez egy URLRequest objektumot kell készí- teni és paraméterként átadni a navigateToURL beépített ActionScript függvénynek.

Az URL lényegében egy "sms:" kezdetű sztring, melyben a kettőspont után megadha- tünk egy telefonszámot.

Page 169: Androidos szoftverfejlesztés

169Receptek haladóknak

Az alábbi példa a 061123456 telefonszámra küldendő új üzenet megszerkesztéséhez indítja el a telefon SMS küldő szoftverét:

public var s:String;

s+="sms:061123456"; navigateT0 URL(new URLRequest(s));

Megjegyzendő, hogy az utasítással az SMS-t nem küldjük el, csupán a telefon alapértelme- zett SMS-küldő alkalmazását ״paraméterezzük fel" és indítjuk el alkalmazásunkból. Amennyi- ben több szövegküldő alkalmazás is telepítve van a mobileszközre, kiválaszthatjuk, melyiket kívánjuk használni.

Miután megírtuk az SMS-t, visszajutunk al- kalmazásunkba. Amennyiben megszakítjuk a műveletet, akkor is az alkalmazásunkhoz kerül vissza a vezérlés.

6.8. Telefonhívás kezdeményezéseAz előző alfejezetben leírthoz hasonlóan tele-

fonhívást is kezdeményezhetünk.Ekkor az URL-ben a "tel:" szót kell használ-

nunk. A kettőspont után itt is megadhatunk egy telefonszámot.

Page 170: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon170

Az alábbi példa a 061123456 telefonszámot előre megadva hívja fel a telefon alapértelme- zett tárcsázószoftverét:

public var s:String;

s+="tel :061123456"; navigateT0 URL(new URLRequest(s));

A módszerrel a telefonszám tárcsázása nem történik meg, csupán a telefon alapértelmezett tárcsázó alkalmazását ״paraméterezzük fel" és indítjuk el alkalmazásunkból.

6.9. Email küldés kezdeményezéseA 6.7 és 6.8 alfejezetekben ismertetett módon

email írását is kezdeményezhetjük alkalmazd- sunkból.

Ekkor az URL-ben a "mailto:" szót kell hasz- nálnunk. A kettőspont után előre megadhatjuk az email tárgyát és szövegtörzsét is.

Az alábbi példa az [email protected] email címet címzettként megadva, a tárgy mezőt a "Tárgy" és a levéltörzset az "Üzenet"szöveggel kitöltve indítja el a telefon alapértelmezett leve- lezőszoftverét:

Page 171: Androidos szoftverfejlesztés

171Receptek haladóknak

public var s:String;

s+="mailto:[email protected]?subject=Tárgy&body=Üzenet";navigateT0 URL(new URLRequest(s));

A módszerrel a levél elküldése nem történik meg, csupán a telefon alapértelmezett levelező alkalmazását ״paraméterezzük fel" és indítjuk el alkalmazásunkból. Amennyiben több levél- küldő alkalmazás is telepítve van a mobilesz- közre, kiválaszthatjuk, melyiket kívánjuk hasz- nálni.

Tapasztalat szerint a módszer a Gmail mo- bilkliensével működik legteljeskörűbben.

6.10. URL megnyitásának kezdeményezése

A 6.7-6.9 alfejezetekben megismert módszer- hez nagyon hasonlóan indíthatjuk el alkalmazá- sainkból az Android alapértelmezett böngésző- jét és kereshetünk fel automatikusan egy web- helyet (ha több böngésző is telepítve van, futás közben kiválaszthatjuk, melyiket akarjuk hasz- nálni). Itt is a navigateToURL függvényt hasz- náljuk.

Page 172: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon172

Például a Google kezdőoldalának az And- roid külső böngészőprogramjával történő meg- tekintéséhez az alábbi kódrészletet használhat- juk:

public var s:String;

s+="http://www.google.com"; navigateT0 URL(new URLRequest(s));

6.11. Böngésző integrálása mobilalkalmazásba

Felmerülhet az igény, hogy alkalmazásain- kon belül, abba integrálva jeleníthessünk meg webes tartalmakat, akár egész oldalakat. Az AIR erre is kínál lehetőséget, mégpedig a StageWebView osztályon keresztül.

A StageWebView lényegében az Android alap- értelmezett böngészőmotorját használja az AIR- en keresztül.

A webes tartalmak megjelenítése kiváló mi- nőségű, ám az automatikus kicsinyítés/nagyítás csak azoknál a weboldaláknál működik, ame- lyeket eleve felkészítették mobileszközön törté- nő megjelenítésre. Ha ez nem így van, akkor sincsen semmi probléma, de például egy

Page 173: Androidos szoftverfejlesztés

173Receptek haladóknak

1024x768-as felbontásra optimalizált weboldalt egy 480x320-as felbontású mobiltelefon képér- nyőjén nem fog kiférni, hanem sokat kell gör- getniink a képernyőt.

A StageWebView használata előtt meg kell győződnünk róla, hogy az adott eszköz biztosan támogatja-e a megjelenítést. Ezt a

StageWebView.isSupported tu la jdonság e llenő rzé - séve l érhetjük el (true az értéke, ha tám ogato tt az osztá ly).

Egy böngészőt alkalmazásunk felületén az alábbi utasításokkal hozhatunk létre:

public var bongeszo:StageWebView;

böngésző = new StageWebView(); bongeszo.stage = this.stage;bongeszo.viewPort = new Rectangle(x,y,width,height);

Az objektumpéldányt hozzá kell adnunk a stage-hez, majd a megjelenítéshez használni kívánt területet is meg kell adnunk, hogy lássuk is a webes tartalmakat.

Weblap betöltéséhez a LoadURL metódust használhatjuk. Ügyelnünk kell rá, hogy a címek tartalmazzák a "http://" előtagot, ellenkező eset­

Page 174: Androidos szoftverfejlesztés

ben az oldal nem fog betöltődni és hibaüzenetet kapunk.

A StageWebView az lOErrorEvent és az ErrorEvent osztályokban definiált hibaeseményeket is ki- válthatja, ezért ezek kezelésére érdemes hibake- zelő függvényt írnunk.

Amennyiben bármilyen okból el kell rejte- nünk a böngészőt, azt a következő utasítással tehetjük meg:

free_bongeszo.viewPort=null;

Az újbóli megjelenítéshez ismét definiálnunk kell a megjelenés területét a fentebb ismertetett módon.

Lehetőség van arra is, hogy a böngészés so- rán az aktuálisan betöltött weboldal linkjét le- kérdezzük, például azért, hogy ezt is megjele- níthessük. Ezt egy speciális esemény figyelésé- vei, a LocationChangeEvent.LOCATION_CHANGE ese- mény kezelésével valósíthatjuk meg.

Az eseménykezelő függvény az event:LocationChangeEvent függvényargumen- tűmön keresztül, az event.location tulajdonság- gal kaphatja meg az aktuális címet, amikor az megváltozik.

174_____________ Androidos szoftverfejlesztés alapfokon

Page 175: Androidos szoftverfejlesztés

175Receptek haladóknak

A fentiek illusztrálására lássuk egy teljes kis- alkalmazás kódját, mely induláskor a Google.hu weboldalát tölti be. Az alkalmazás felső részén egy szövegdobozban mindig megjelenik az ak- tuálisan böngészett/betöltött oldal. A hibák ke- zelésétől most eltekintünk.

<?xml version="1.0" encoding="utf-8"?><s:Applicationxmlns:fx="f1ttp://ns.adobe.com/mxml/2009"

xmlns:s="library://ns.adobe.com/flex/spark"applicationDPI="160"

backgroundColor="#FFFFFF"

applicationComplete="init(event)">

<fx:Script><![CDATA[import mx.events.FlexEvent; public var bongeszo:StageWebView;

protected function init(event:FlexEvent):void{if(StageWebView.isSupported== true){böngésző = new StageWebView(); bongeszo.stage = this.stage;

bongeszo.addEventListener(LocationChangeEvent.LOCA TION_CHANGE,frissít);}

Page 176: Androidos szoftverfejlesztés

webhely.text="google.hu";

bongeszo.viewPort = newRectangle(0,60,stage.width,stage.height-60);bongeszo.loadURL("http://google.hu");}public function frissit(event:LocationChangeEvent): void

176_____________ Androidos szoftverfejlesztés alapfokon

{webhely.text=event.location;}]]></fx:Script>

<s:Textlnput id="webhely" left="10" right="10" top="10"/>

</s:App!ication>

B

Page 177: Androidos szoftverfejlesztés

6.12. Busy indicator használataA felhasználók felé kényelmes módon jelez-

hetjiik azt, hogy alkalmazásunk műveletet vé- géz.

Erre a célra használhatjuk a Busylndicator komponenst, ami lényegében a Windows ho- mokórájának androidos megfelelője. Androidon nem homokórát, hanem egy körbe-körbe forgó pálcikát jeleníthetünk meg.

Receptek haladóknak____________________________ 177

Pusztán a felhasználó felé történő visszajel- zést szolgálja, kihatása az alkalmazások műkő- désére nincsen.

Két tulajdonságát emeljük ki.

Rotationlnterval: a forgás sebességét változtat- hatjuk meg az alapértékről. Milliszekundum értéket kell megadni.

Page 178: Androidos szoftverfejlesztés

SymbolColor: A szimbólum színét változtathat- juk meg. Hexadecimális formában kell meg- adnunk, pl.: ffOOFFOO.

A Busylndicator-t nem lehet a szó valódi ér- telmében elindítani, vagy leállítani. A használa- ta úgy történik, hogy a visible tulajdonságának true, vagy false értékre állításával megjelenítjük, vagy eltávolítjuk a képernyőről. Az animáció automatikus.

6.13. Hangfájlok lejátszásaHangfájlok egyszerű lejátszására az

URLRequest és a Sound osztályokat használhat- juk.

Az alábbi kódrészlet a 'zene.mp3' zenefájlt le- játszását mutatja be.

public var zenefajhURLRequest = new URLRequest("zene.mp3");

178_____________ Androidos szoftverfejlesztés alapfokon

public var lejatszo:Sound = new Sound(zenefajl);

s.play();

Page 179: Androidos szoftverfejlesztés

179Hogyan tovább?

7. Hogyan tovább?

Most, hogy a Kedves Olvasó már rendelkezik a szükséges alapvető ismeretekkel az Action- Script- és Flex-alapú mobilfejlesztéshez, felme- rülhet a kérdés: ״Hogyan tovább?"

Tisztázni kell magunkban, hogy milyen jel- legű alkalmazásokat szeretnénk készíteni.

Ezek lehetnek üzleti alkalmazások, segéd- programok, játékprogramok stb. Az Adobe AIR segítségével mindent elérhetünk, csak kitartásra van szükségünk. A könyv irodalomjegyzéke további segítséget kíván nyújtani a továbbié- péshez. Rengeteg weboldal és még több szak- könyv elérhetőségét ill. pontos megnevezését találhatjuk a könyv végén. Ezek közül sok fór- rást a szerző is rendszeresen használ napi szin- ten.

Page 180: Androidos szoftverfejlesztés

181Függelék

<!-- A universally unique application identifier. Must be unique across all AIR applications.Using a reverse DNS-style name as the id is recommended. (Eg. com.example.ExampleApplication.) Required. -->

<id>FeherKrisztian. Példa l</id>

<!-- Used as the filename fór the application. Required. --> <filename>Peldal</filename>

<!-- The name that is displayed in the AIR application installer.May have multiple values fór each language. See samples or xsd schema fiié. Optional. --> <name>Peldal</name>

<!-- A string value of the formát <0-999>.<0-999>.<0- 999> that represents application version which can be used to check fór application upgrade.Values can alsó be 1-part or 2-part. It is nőt necessary to have a 3-part value.An updated version of application must have a versionIMumber value higher than the previous version. Required fór namespace >= 2.5 . —> <versionNumber>0.0.0</versionNumber>

<!- A string value (such as "v l", "2.5", or "Alpha 1") that represents the version of the application, as it should be shown to users. Optional. -><!-- <versionLabelx/versionLabel> -->

Page 181: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon180

Függelék

Egy alkalmazásleíró XML fájl teljes tartalma:

<?xml version="1.0" encoding="utf-8" standalone="no"?><applicationy.m\cs=" http://ns.adobe.com/air/application/3A">

<!-- Adobe AIR Application Descriptor Fiié Template.

Specifies parameters tor identifying, installing, and launching AIR applications.

xmlns - The Adobe AIR namespace:http://ns.adobe.eom/air/application/3.lThe last segment of the namespace specifies the vers-ion of the AIR runtime required fór this application torun.

minimumPatchLevel ־ The minimum patch level of the AIR runtime required to run the application. Optional.—>

Page 182: Androidos szoftverfejlesztés

183

<!- <transparent></transparent> -->

Függelék_________________________

<!-- Whether the window is initially visible. Optional. Default false. --><!-- <visiblex/visible> ->

<!-- Whether the user can minimize the window. Optional. Default true. --><!-- <minimizablex/minimizable> —>

<!-- Whether the user can maximize the window. Optional. Default true. -־><!-- <maximizablex/maximizable> -->

<!-- Whether the user can resize the window. Optional. Default true. --><!-- <resizablex/resizable> -->

<!-- The window's initial width in pixels. Optional. --> <!-- <widthx/width> -->

<!-- The window's initial height in pixels. Optional. —> <!-- <heightx/height> -־>

<!— The window's initial x position. Optional. --><!-- <xx/x> ~>

<!-- The window's initial y position. Optional. --><!— <yx/y> ~>

<!— The window's minimum size, specified as a width/ height pair in pixels, such as "400 200". Optional. --> <!-- <minSizex/minSize> -->

Page 183: Androidos szoftverfejlesztés

<!-- Description, displayed in the AIR application installer.May have multiple values fór each language. See samples or xsd schema fiié. Optional. -־><!-- <descriptionx/description> -->

<!-- Copyright Information. Optional -->״!> <copyrightx/copyright> ~>

<!-- Publisher ID. Used if you're updating an application created prior to 1.5.3 —><!-- <publisherlDx/publisherlD> -->

<!-- Settings fór the application's initial window. Required. --><initialWindow><!-- The main SWF or HTML fiié of the application. Required. ~> Note: In Flash Builder, the SWF reference is set ־-!>automatically. —><content>[This value will be overwritten by Flash Builder in the output app.xml]</content>

<!-- The title of the main window. Optional. --><!-- <titlex/title> -->

<!-- The type of system chrome to use (either "stan- dard" or "nőne"). Optional. Default standard. --><!— <systemChromex/systemChrome> -->

<!-- Whether the window is transparent. Only applicable when systemChrome is nőne. Optional. Default false. -->

182_____________ Androidos szoftverfejlesztés alapfokon

Page 184: Androidos szoftverfejlesztés

184

<!~The window's initial maximum size, specified as a width/height pair in pixels, such as "1600 1200". Optional. --><!-- <maxSizex/maxSize> -->

<!--The initial aspect ratio of the app when launched (either "portrait" or "landscape"). Optional. Mobile only. Default is the natural orientation of the device —>

<!-- <aspectRatiox/aspectRatio> -->

<!— Whether the app will begin auto-orienting on iaunch. Optional. Mobile only. Default false -->

<!-- <autoOrientsx/autoOrients> -->

<!-- Whether the app launches in full screen. Optional. Mobile only. Default false —>

<!-- <fullScreenx/fullScreen> —>

<!-- The render mode fór the app (either autó, cpu, gpu, or direct). Optional. Default autó -->

<!— <renderModex/renderMode> —>

<!- Whether or nőt to pan when a soft keyboard is raised or lowered (either "pan" or "nőne"). Optional. Defaults "pan." --><!-- <softKeyboardBehaviorx/softKeyboardBehavior> --><autoOrients>true</autoOrients><fu!IScreen>false</fullScreen><visible>true</visible>

Androidos szoftverfejlesztés alapfokon

Page 185: Androidos szoftverfejlesztés

185Függelék

<softKeyboardBehavior>none</softKeyboardBehavior></initialWindow>

We recommend omitting the supportedProfiles ־-!>element, --><!- which in turn permits your application to be deployed to all --><!- devices supported by AIR. If you wish to restrict deployment —><!-- (i.e., to only mobile devices) then add this element and list — ><!— only the profiles which your application does support. ~><!— <supportedProfiles>desktop extendedDesktop mobileDeviceextendedMobileDevice</supportedProfiles> -->

<!- The subpath of the standard default installation location to use. Optional. -־><!-- <installFolderx/installFolder> -->

<!-- The subpath of the Programs menü to use. (Ignored on operating systems without a Programs menü.) Optional. <־־<~ <programMenuFolderx/programMenuFolder> <!-־

<!-- The icon the system uses fór the application. Fór at least one resolution,specify the path to a PNG fiié included in the AIR package. Optional. -->

Page 186: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon186

<!-- <icon>< im agel6x l6x/im age l6x l6><image32x32x/image32x32><image36x36x/image36x36><image48x48x/image48x48><image57x57x/image57x57><image72x72x/image72x72>< im a g e ll4 x ll4 x / im a g e ll4 x ll4 >< im agel28xl28x/im agel28xl28>

</icon> -->

<!-- Whether the application handles the update when a user double-clicks an update version of the AIR fiié (true), or the default AIR application installer handles the update (false).Optional. Default false. --><!— <customUpdatelllx/customUpdateLJI> -->

<!-- Whether the application can be launched when the user clicks a link in a web browser.Optional. Default false. —><!-<allowBrowserlnvocationx/allowBrowserlnvocation> - ->

<!-- Listing of fiié types fór which the application can register. Optional. --><!-- <fileTypes> -->

<!-- Defines one fiié type. Optional. --><!— <fileType> —>

Page 187: Androidos szoftverfejlesztés

187Függelék

<!-- The name that the system displays fór the registered fiié type. Required. --><!-- <name></name> -־>

<!-- The extension to register. Required. --><!-- <extensionx/extension> -->

<!-- The description of the fiié type. Optional. —><!-- <descriptionx/description> -->

<!—The MIMÉ contenttype. --><!-- <contentTypex/contentType> -->

<!-- The icon to display fór the fiié type. Optional. ~><!-- <icon>

< im agel6xl6x/im agel6xl6><image32x32x/image32x32><image48x48x/image48x48>< im agel28xl28x/im agel28xl28>

</icon> — >

<!-- </fileType> --><!-- </fileTypes> —>

<!-- iOS specific capabilities --><!-- <iPhone> --><!- A list of plist key/value pairs to be added to the application Info.plist --><!-- <lnfoAdditions><![CDATA[<key>UIDeviceFamily</key><array>

Page 188: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon188

<string>l</string><string>2</string></array><key>UIStatusBarStyle</key><string>UIStatusBarStyleBlackOpaque</string><key>UIRequiresPersistentWiFi</key><string>YES</string>]]></lnfoAdditions> -><!-- A list of plist key/value pairs to be added to the application Entitlements.plist --><!-- <Entitlements><![CDATA[

<key>keychain-access-groups</key><array>

<stringx/string><stringx/string>

</array>]]>

</Entitlements> --><!— Display Resolution fór the app (either "standard" or "high"). Optional. Default "standard" --><!--<requestedDisplayResolutionx/requestedDisplayResol ution> --><!-- </iPhone> -->

Specify Android specific tags that get passed to ־־!>AndroidManifest.xml fiié. --><!--<android> --><!-- <manifestAdditions>

Page 189: Androidos szoftverfejlesztés

189Függelék

<![CDATA[<manifest android:installLocation="auto"> <uses-permissionandroid:name="android.permission.lNTERNET"/><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android. permission.ACCESS_FINE_LOCATION"/><uses־feature android:required="true" android:name="android.hardware.touchscreen. multi- touch"/><application android:enabled="true"><activity android:excludeFromRecents="false"> <intent-filter><action android:name="android.intent.action.MAIN"/>ccategoryandroid:name="android.intent.category.LAUNCHER"/></intent-filter></activity></application></manifest>]]></manifestAdditions> ־־><!-- Color depth fór the app (either "32bit" or "16bit"). Optional. Default 16bit before namespace 3.0, 32bitafter --><!-- <colorDepthx/colorDepth> --><!-- </android> —><!-- End of the schema fór adding the android specific tags in AndroidManifest.xml fiié -->

Page 190: Androidos szoftverfejlesztés

<android><colorDepth>16bit</colorDepth><manifestAdditions><![CDATA[<manifest android:installLocation="auto"><!--See the Adobe AIR documentation fór more infor- mation about setting Google Android permissions~> <!--Removing the permissionandroid.permission.INTERNET will have the side effect of preventing you from debugging your application on your device--> cuses-permissionandroid:name="android.permission. INTERNET"/><!—<uses-permissionandroid :name="android.permission. WRITE_EXTERNAL_ STORAGE"/>—><!--<uses-permissionandroid:name="android.permission.READ_PHONE_STA TE"/>—><!—<uses-permissionandroid:name="android.permission. ACCESS_FINEJ_OC ATION"/>—><!—The DISABLE_KEYGUARD and WAKE_LOCK permissions should be toggled together in order to access AIR's SystemldleMode APIs--> <!--<uses-permissionandroid :name="android. permission. DISABLE_KEYGUAR D"/>—><!-<uses-permissionandroid :name-'android.permission. WAKE_LOCK"/>--> <!—■cuses-permissionandroid:name="android. permission. CAMERA"/>->

190______________ Andro idos szoftverfejlesztés alapfokon

Page 191: Androidos szoftverfejlesztés

191Függelék

uses-permission>־-!>android:name="android.permission.RECORD_AUDIO"/>—><!—The ACCESS_NETWORK_STATE and ACCESS_WIFI_STATE permissions should be toggled together in order to use AIR's Networklnfo APIs-->< !--<uses-permissionandroid:name="android.permission.ACCESS_N ETWORK _STATE"/>—><!--<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>—></manifest>

]]></manifestAdditions></androld><iPhone>

<lnfoAdditionsx![CDATA[<key>UIDeviceFamily</key><array>

<string>l</string><string>2</string>

</array>]]x/lnfoAdditions>

<requestedDisplayResolution>high</requestedDisplayResolution>

</iPhone></application>

Page 192: Androidos szoftverfejlesztés

Andro idos szoftverfejlesztés alapfokon192

Ajánlott irodalom

Flex és ActionscriptAdobe Creative Team: Adobe Flash CS4 Profes- siónál Tanfolyam a könyvben. (Adobe Press), Perfact-Pro Kft., 2009.

Adobe Creative Team: ActionScript 3.0 Adobe Flash Professional alkalmazáshoz. (Adobe Press), Perfact-Pro Kft., 2009.

Colin Moock: ActionScript 3.0 a gyakorlatban. Kiskapu kft., 2008.

Michael Labriola, Jeff Tapper, Matthew Boles: Adobe Flex 4.5 Fundamentals. Adobe Press, 2011.

Rich Tretola: Developing Applications with Flex 4.5. O'Reilly Media, .2011.

Page 193: Androidos szoftverfejlesztés

193A ján lott irodalom

Joseph Labrecque: What's new in Adobe AIR 3. O'Reilly Media, 2012.

Thibault Imbert: Introducing Starling. O'Reilly Media, 2012.

Vérinique Brossier: Developing AndroidApplications with adobe AIR. O'Reilly Media, 2011.

Scott Citron, Michael Murphy: Adobe Creative Suite 5 Design Prémium HOW-TOs. Adobe Press, 2010.

Androidos fejlesztés és dizájnEkler Péter, Fehér Marcell, Forstner Bertalan, Kelényi Imre: Android-alapú szoftverfejlesztés. SZAK Kiadó, 2012.

Uwe Post: Android-Apps entwickeln. Galileo Press, 2013.

Wei-Meng Lee: Android-Bausteine. WILEY- VCH Verlag GmbH & Co. KgaA, 2013.

Theresa Neil: Mobile Design Pattern Gallery. O'Reilly Media, 2012.

Page 194: Androidos szoftverfejlesztés

1 9 4 ____________ Androidos szoftverfejlesztés alapfokon

Apache, MySQL és PHP

Ken Coar, Rich Bowen: Apache receptek. Kiskapu Kft, 2008.

Tricia Ballad & William Ballad: Biztonságos webalkalmazások PHP nyelven.Kiskapu Kft, 2010.

Zak Greant, Chris Newman: MySQL zsebkönyv. Kiskapu Kft, 2007.

Kozmajer Viktor: PHP és MySQL az alapoktól. BBS-INFO Kiadó, 2011.

Sági Gábor: Webes adatbázis-kezelés MySQL és PHP használatával. BBS-INFO Kiadó, 2005.

Luké Welling, Laure Thomson: PHP és MySQL webfejlesztőknek. Perfact-Pro Kft., 2012.

Mike Andrews, James Whittaker: Hogyan tör- jünk fel webhelyeket? Kiskapu Kft, 2007.

Page 195: Androidos szoftverfejlesztés

195Webhelyek

Webheiyek

Google Play Áruház https://pIay.google.com/store

Amazon Appstore fór Android http://www.amazon.com/mobile־ apps/b?node=2350149011

Az Android-rólhttp://developer.android.com/about/index.html

Open Handset Alliance http://www.openhandsetalliance.com

Adobe AIR SDKhttp: // www. ad obe. com/devnet/air/air-sdk- download.html

Adobe Gaminghttp ://gaming. adobe.com/

Adobe AIR fejlesztői portálhttp: //www. adobe.com/devnet/air .html

Page 196: Androidos szoftverfejlesztés

Androidos szoftverfejlesztés alapfokon196

Adobe Developer Connection http: //www. adobe. com/devnet.html

Adobe AIR runtime (PC/MAC) http://get. adobe .com/air/

Apache Flex http://flex.apache.org

Flex in a week" ingyenes videotréningsorozat״http://www.adobe.com/devnet/flex/video-training.html

További Adobe tréningek http://tv.adobe.com

JátékfejlesztéshezStarling 2D keretrendszer Flash-hez http://gamua.com/starling/

Away3D keretrendszer Flash-hez http ://away3d. com/

MySQLhttp://www.mysql.com

PHPhttp://php.net

Page 197: Androidos szoftverfejlesztés

197Webhelyek

Apachehttp://www.apache.org

Stackoverflow (fejlesztői fórum és tudástár) http: //stacko verf low. com

Teszteszközök Adobe AIR fejlesztésekhezhttps ://github. com/bigf ishhttp://gskinner.com/blog/archives/2010/02/per-formancetest.htmlhttp://jpauclair.net/2010/12/23/complete-flash-profiler-its-getting-serious/

Angol nyelvű szakirodalom

Adobe Presshttp://www.adobepress.com

O'Reilly Media http://oreilly.com

Page 198: Androidos szoftverfejlesztés

A BBS-INFO KIADÓ AJANLATAA k ó d - Izgalom és romantika a bankdiktatúra, a HAARP, és a manipulációk hálójában. (3 8 4 o ldal, A 5 , 2 9 9 0 ft .)Adobe Photoshop zsebkönyv (192 oldal, B6, 870 ft)A manipuláció tudománya (160 oldal, B6, 760 Ft.)Az élet alapkérdései - Gén, ember, társadalom (214 oldal, B5 ,1970 ft.)Az internet és lehetőségei (240 oldal, B6, 1970 ft.)Csodálatos úticélok (160 színes oldal, keménytáblás, B6,1970 ft.)Elektronikai készülékek hulladékainak kezelése (80 0.790 Ft.)Excel, Word, PowerPoint, Outlook, Access 2007 2010, és 2013 zsebkönyvek Excel haladóknak (148 oldal, B5,1970 Ft.)GTK+ programozás Free Pascalban (244 oldal, B5, 2490 Ft.)Hétköznapi marketing sorozat (970 Ft./db.)Hogyan kezdjem? (240 o. 1760 Ft.)Informatikai füzetek (ECDL vizsgákhoz)Intrastat kézikönyv (192 o. 1870 Ft.)JavaScript kliens oldalon (188 0. 2900 Ft.)Kezdő bűnözők kézikönyve (216 0. 970 Ft.)Macromedia Flash MX (204 o. 1970 Ft.)Makróhasználat Excelben (118 oldal, B5, 1750 Ft.)MySQL.NET (540 oldal, 3920 ft.)Nevelés és értékkutatás - A pedagógiai gyakorlat pszichológiája (200 o. 1970 ft.) Office 2007 (464 oldal, 3920 ft.)Office 2010 (464 oldal, 3920 ft.)OpenOffice.org (400 oldal, 2990 ft.)Ötletek és tanácsok Windows felhasználóknak (176 o. CD mell. 1970 Ft.)PC hardver kézikönyv (360 o. 2870 Ft.)PHP és MySQL az alapoktól (172 oldal, B6, 1490 Ft.)Problémamegoldó folyamat a minőségértés hatékonyságért (72 o. 650 Ft.) Programozás Turbo Pascal nyelven (232 o. 1290 Ft.)Számítógéphasználat mindenkinek (664 o. 3920 Ft.)Számítástechnika másként (64 oldal, B6, színes, keménytáblás, 1190 Ft.)Szerver oldali Webprogramozás (192 o. 2900 Ft)Szövegszerkesztési feladatgyűjtemény + CD mellékJ. (144 ο. A4,1970 Ft.)Teremtők (312 oldal, A5, 1970 Ft.)Titkos hadműveletek pénztárcánk ellen (240 o. 540 Ft.)Weblapkészítés házilag (200 0.1760 Ft.)Webes adatbázis-kezelés MySQL és PHP használatával (160 oldal, B6, 2490 ft.) Windows XP részletesen (386 o. 1970 Ft.)Windows 7 mindenkinek (392 o. 2990 Ft.)Windows 8 és 8.1 mindenkinek (372 oldal, 2990 Ft.)Windows XP, Vista, 7, 8 stb. Zsebkönyvek Videoszerkesztés házilag (240 o. 1970 Ft.)XHTML - A HTML megújulása XML alapokon (200 o. 2900 Ft.)35 NAP - upták Béla 1956-os naplója (224 oldal, B5, keménytáblás, 1970 Ft.)

További könyvek, részletes inform ációk, újdonságok és tartalom jegyzékek az Interneteten:

www.bbs.huA könyvek megrendelhetők a kiadó címén: BBS-INFO Kft. 1630 Bp., Pf. 21.