Android Prog

Embed Size (px)

Citation preview

  • 5/22/2018 Android Prog

    1/67

    Debreceni Egyetem

    Informatikai Kar

    Alkalmazsfejleszts Android platformra

    Belstmavezet: Klstmavezet: Ksztette:

    Btfai Norbert Szabkos Kovcs Szilrd

    Egyetemitanrsegd Micont Kft. Programtervezinformatikus

    Debrecen

    2011

  • 5/22/2018 Android Prog

    2/67

    2

    1. Bevezets

    2. Android platform

    2.1. Mi is az az Android?

    2.1.1. Sajtossgok

    2.1.2. Architektra

    2.1.3. Alkalmazsok

    2.1.4. Alkalmazs keretrendszer

    2.1.5. Knyvtrak

    2.1.6. Android futsi krnyezet

    2.1.7. Linux kernel

    2.2. Android alapelemek

    2.2.1. Activity-k

    2.2.1.1. Activity-k letciklusa

    2.2.2. Szolgltatsok

    2.2.3. Broadcast receiver-ek

    2.2.4. Tartalom szolgltatk

    2.2.5. Intent-ek s intent szrk

    2.3. AndroidManifest.xml

    2.4. Felhasznli fellet

    2.4.1. Megjelentelemek hieachija

    2.4.2. UI definils XML-ben

    2.5. Alkalmazs erforrsok

    2.5.1. Erforrs tipusok

    2.6. Adattrols

    3. Egy alkalmazs Android Platformon: Voice+

    3.1. Voice+ architektrja

  • 5/22/2018 Android Prog

    3/67

    3

    3.2. Voice+ felhasznli fellete

    3.2.1. Voice+ funkcii 3.2.1.1. Belltsok megtekintse

    3.2.1.2. Google account kezelse

    3.2.1.3. Visszahvs telefonszmainak megjelentse

    3.2.1.4. Telefonszm lista megjelentse hvs indtsakor

    3.2.1.5. Hvs sttusz

    3.3. Megvalsts

    3.3.1. Belltsok

    3.3.1.1. Kimenhvs integrci

    3.3.1.2. Google account

    3.3.1.3. Visszahvs szmai

    3.3.2. Hvs indtsa

    3.3.2.1. GoogleVoice osztly

    3.3.2.2. Bejelentkezs

    3.3.2.3. Visszahvs telefonszmainak lekrse

    3.3.2.4. Hvskezels

    3.4. Tesztels

    3.5. A Voice+ publiklsa az Android Marketbe

    4. sszefoglals

    5. Ksznetnyilvnts

    6. Irodalomjegyzk

  • 5/22/2018 Android Prog

    4/67

    4

    1. BevezetsA multimdis kszlkek, mint a szmtgp, televzi, internet s mobiltelefon napjainkbanmr termszetes, mindennap hasznlatos eszkzkk vltak. Mivel ezekeket gyakran hasznljuk,

    nem felttlenl vesszk szre, hogy ezek a valaha forradalmi jdonsgoknak szmt eszkzk

    mennyire befolysoljk mindennapjainkat s mekkora hatsuk van letnk fontosabb terleteire.

    Ezen kszlkek lelke idrl idre egyre kisebb s kompaktabb, viszont a teljestmnyk

    nvekszik. Elrtnk arra a szintre, hogy legtbbszr egyszerbb egy begyazott rendszerbe olyan

    sztenderd s elterjedt hardverelemeket pteni, amelyeket egy opercis rendszer is alapbl

    tmogat, gy a hardver- s szoftverfejleszts ideje egyarnt tredkre cskken.

    Linux alap eszkzk szmtalan termkben fordulnak el, gy az Android opercis rendszer

    Linux alapokkal, Java tmogatssal s remek megjelents kezeljvel elg gyorsan npszerv

    vlt.

    Legelterjedtebb Androidos kszlkek a mobiltelefonok. Mivel ez az opercis rendszer Linux

    alapokra plt, gy kezdett veszi a begyazott rendszerekben val elterjedse is. gy a Java-ban

    val fejleszts el

    nyei - a gyorsabb s biztonsgosabb termkek ksztse - is kihasznlsrakerlnek.

    A diplomamunkmban segtsget nyjt cg a MICONT Kft. sajt kszts intelligens

    laksautomatikhoz tervezett begyazott rendszereit olyan hardverekkel vltja ki, melyeken

    kpes futni az Android rendszer. Abbl indultunk ki, hogy az alapoktl kezdve elszr egy

    mkd rendszerre, azaz egy mobiltelefonra kszljn el egy olyan alkalmazs, amely az

    Android rendszer fbb rszeit hasznlja ki, gy, mint a megjelents, internet kapcsolat,

    rendszeresemnyek, adattrols. Msrszt fontosnak tartottuk, hogy komplett, msok ltal ishasznlhat legyen a programunk. Ezzel fogjuk bizonytani magunknak, hogy tudunk az Android

    rendszerrel termk minsg alkalmazst fejleszteni s rdemes a jvben is erre a rendszerre

    alapozni.

  • 5/22/2018 Android Prog

    5/67

    5

    Jelen dolgozatom clja bemutatni az Android platformot, annak rszeit s alapvetmkdst,

    tovbb a telekomminikcis megoldsok kzl egy Google Voice szolgltatsra pl kliensalkalmazs megvalstst Android platformon.

  • 5/22/2018 Android Prog

    6/67

    6

    2. Android platform2.1. Mi is az az Android?Az Android platformot az Open Handset Alliance (OHA) konzorcium, egy multinacionlis

    szvetsg hozta nyilvnossgra 2007. november 12.-n. Az OHA a vezetmobil- s technolgiai

    trsasgok egy csoportja, melynek eddig sszesen nyolcvan hardver, szoftver s

    telekommunikcis cg a tagja, mint pldul a Google, LG, Samsung, Vodafone.

    Az Android platform az alapoktl kezdve plt fel, hogy lehetsget biztostson a fejlesztknek

    olyan j s innovatv mobil alkalmazsok ltrehozsra, melyek kihasznljk az internet

    csatlakozsra kpes eszkzk sszes elnyt.Az Android platform magba foglalja a Dalvik virtulis gpet, hogy maximalizlja az

    alkalmazsok teljestmnyt, a hordozhatsgot s a biztonsgot, tovbb optimalizlja a

    memria s a hardver erforrsokat mobil krnyezetben.

    Az Android SDK gazdag eszkztrval lehetv teszi a fejlesztknek az alkalmazsok

    fejlesztst erre a platformra. Ide tartoznak a specilis fejleszt s hibakeres eszkzk, gazdag

    knyvtrak, egy igazi eszkz emultor, rszletes dokumentci, minta projektek s tmutatk. A

    fejlesztk zkkenmentes munkjt egy Eclipse plugin segti, mely ezeket az eszkzket

    integrlja az Eclipse integtegrlt fejleszteszti krnyezethez.

    Az Android elretrsnek legnagyobb nyertesei a ktsgtelenl kszlkgyrtk. 2009-ben a

    vilggazdasgi vlsgnak ksznheten rezheten cskkentek az eladsok, viszont a Gartner

    Inc., a vilg vezet informci- technolgiai kutat s tancsad trsasga szerint a mobil

    kszlkekbl 2010-ben vilgviszonylatban kzel 1,6 millird db-ot adtak el, amely a 2009-es

    adatokhoz kpest 31,8% nvekedst jelent. Ezen bell az okostelefon eladsok 2010-ben 72,1%-

    kal nvekedtek az elz vhez kpest, az sszes 2010-ben eladott mobil kszlk 19%-a (297

    milli darab) okostelefon volt.

  • 5/22/2018 Android Prog

    7/67

    7

    Mobil kszlkek eladsai vilgviszonylatban 2010-ben (ezer darab):

    Gyrt cg 2010 eladottmennyisg

    2010 piacirszeseds (%)

    2009 eladottmennyisg

    2009 piacirszeseds (%)

    Nokia 461 318,2 28,9 440 881,6 36,4Samsung 281 065,8 17,6 235 772,0 19,5LG Electronics 114 154,6 7,1 121 972,1 10,1Research In Motion 47 451,6 3,0 34 346,6 2,8Apple 46 598,3 2,9 24 889,7 2,1Sony Ericsson 41 819,2 2,6 54 956,6 4,5Motorola 38 553,7 2,4 58 475,2 4,8ZTE 28 768,7 1,8 16 026,1 1,3HTC 24 688,4 1,5 10 811,9 0,9Huawei 23 814,7 1,5 13 490,6 1,1Tbbi 488 569,3 30,6 199 617,2 16,5sszesen 1 596 802,4 100,0 1 211 239,6 100,0

    Forrs: Gartner (2011 februr)

    Az okostelefonok piaca tovbbra is a fejlett orszgokban koncentrldik, ahol a vevk jvedelme

    nagyobb s ahol a hlzatok elg gyorsak ahhoz, hogy maradktalanul ki lehessen hasznlni az

    okostelefonok tudst. Ez magyarzza azt, hogy 2010. negyedik negyedvben az okos telefoneladsok 52,3%-a, valamint az sszes mobiltelefon rtkestsek kzel fele Nyugat-Eurpban s

    szak-Amerikban trtnt. Az ers verseny 2010 v vgre elrte az okostelefon piac legnagyobb

    szereplit is.

    Okos telefonok eladsai vilgviszonylatban 2010-ben opercis rendszer szerint (ezer darab):

    Opercis rendszer2010 eladott

    mennyisg2010 piaci

    rszeseds (%)2009 eladott

    mennyisg2009 piaci

    rszeseds (%)

    Symbian 111 576,7 37,6 80 878,3 46,9Android 67 224,5 22,7 6 798,4 3,9BlackBerry 47 451,6 16,0 34 346,6 19,9iOS 46 598,3 15,7 24 889,7 14,4Windows 12 378,2 4,2 15 031,0 8,7Tbbi 11 417,4 3,8 10 432,1 6,1sszesen 296 646,6 100,0 172 376,1 100,0

    Forrs: Gartner (2011 februr)

  • 5/22/2018 Android Prog

    8/67

    8

    Az okos telefon piacon az Androidos kszlkek eladsa 888,8%-al nvekedett 2009-hez kpest

    s gy piaci rszeseds szempontjbl a 2010-ben a msodik helyre kerlt. A Nokia tovbbra is alegnagyobb okostelefon-gyrt, hiszen a Symbian szinte teljes egszben az kszlkeiben

    tallhat meg.

    Az Android tbb gyrt termkben is megjelenik. A kt legnagyobb a Samsung s a HTC - ezek

    egytt adtk 2010-ben az sszes Androidos kszlk forgalmnak csaknem felt. A

    www.unwiredview.com szerint csak a Samsung az eladsok 34%-t tudhatta magnak, ezzel a

    Google legfbb partnerv vlt.

    sszessgben elmondhat, hogy a Google opercis rendszert felhasznl gyrtk profitltak az

    Android elterjedsbl, mivel a LG, Samsung, HTC okos telefonokbl szrmaz forgalma

    jelents nvekedst mutatott, radsul a cscskszlkeken kvl a kzpkategris termkek

    eladsa is emelkedett a Canalys elemzcg szerint.

    Az elemzcgek 2011-re is kilezett versenyt jsolnak a gyrtk, valamint a mobil opercis

    rendszerek kztt.

    2.1.1. Sajtossgok Alkalmazs keretrendszer:a komponensek cserjhez s jrafelhasznlshoz Dalvik virtulis gp:mobileszkzkre optimalizlva Integrlt bngsz: nylt forrs WebKit motorra ptve Optimalizlt rajzols:a 2D rajzolshoz egyedi grafikus knyvtrat biztost; a 3D rajzols az

    OpenGL ES 1.0 specifikcira pl (opcionlis hardver gyorstssal)

    SQLite:a strukturlt adattrolshoz Mdia tmogats:tmogatja az sszes elterjedt audio, video s kpformtumot (MPEG4,

    H.264, MP3, AAC, AMR, JPG, PNG, GIF)

    GSM Telephony:(hardver fgg) Bluetooth, EDGE, 3G s WiFi:(hardver fgg) Kamera, GPS, irnyts gyorsulsmr:(hardver fgg)

  • 5/22/2018 Android Prog

    9/67

    9

    Gazdag fejleszti krnyezet:magban foglalja a telefon emultort, a nyomkvetshezszksges eszkzket, memria- s teljestmnymrst, tovbb az Eclipse IDE-hezszksges plugint.

    2.1.2. ArchitektraAz albbi kp az Android opercis rendszer fkomponenseit brzolja, melyek ksbb rszletes

    bemutatsra kerlnek.

    2.1.3. AlkalmazsokAz Android eleve tartalmaz egy alkalmazs alapcsomagot, tbbek kztt egy levelez klienst,

    SMS programot, naptrt, trkpeket, bngszt, nvjegyzk kezelt, s sok mst. Az

    alkalmazsok Java programozsi nyelven kszltek.

  • 5/22/2018 Android Prog

    10/67

    10

    2.1.4. Alkalmazs keretrendszerA nylt fejleszti krnyezettel az Android lehetsget biztost a fejlesztknek, hogy a lehetlegmagasabb sznvonal s innovatv alkalmazsokat ksztsenek. A fejlesztk szabadon

    kihasznlhatjk az adott eszkz hardware kpessgeit, hozzfrnek az sszes informcihoz,

    futtathatnak httrszolgltatsokat, riasztsokat llthatnak be, zeneteket rhatnak ki a fejlcre, s

    mg sok-sok mst.

    A fejlesztk teljes hozzfrssel rendelkeznek a mag-alkalmazsok ltal hasznlt keretrendszer

    API-khoz. Az alkalmazs architektra tervezse sorn elsdleges szempont volt a komponensek

    egyszer jrafelhasznlhatsga; brmely alkalmazs publiklhatja a sajt kpessgeit, s

    brmely ms alkalmazs ignybe veheti azokat (a keretrendszer ltal meghatrozott biztonsgi

    elrsok figyelembe vtelvel). Ugyanez a mechanizmus teszi lehetv a felhasznlk szmra a

    komponensek cserjt.

    Az alkalmazsok htterben tallhat jpr szolgltats s rendszer, mint pldul:

    Alkalmazsfejlesztshez hasznlt Nzetek egy sokrt s bvthet halmaza, idertve alistkat, tblzatokat, rcsokat, szvegdobozokat, gombokat, vagy akr a begyazhatbngszt is.

    Tartalom szogltatk, melyeknek segtsgvel az alkalmazsok ms alkalmazsok adataihozfrhetnek hozz (pldul a Nvjegyzk), vagy megoszthatjk sajt adataikat.

    Erforrs kezel, forrskdon kvli erforrsok elrshez, mint pldul adott nyelv(lokalizlt) stringek, grafikk, stb.

    rtests kezel, aminek segtsgvel az alkalmazsok sajt rtestseket, figyelmeztetseketjelenthetnek meg az informcis svon.

    Tevkenysg kezel, ami az alkalmazsok letciklust vezrli s egy kzs navigcisfelletet biztost.

  • 5/22/2018 Android Prog

    11/67

    11

    2.1.5. KnyvtrakAz Android tartalmaz egy C/C++ knvtrat, amit az Android rendszer tbb komponense ishasznl. Ezeket a lehetsgeket az Android alkalmazs keretrendszeren keresztl rhetik el a

    fejlesztk. A plda kedvrt felsorolunk nhny alapknyvtrat:

    C Rendszerknyvtr az alap C rendszerknyvtr (libc) egy BSD-szrmaztatottimplementcija, Linux alap begyazott rendszerekre hangolva.

    Mdia Knyvtrak PacketVideo OpenCORE alap; a knyvtrak tmogatjk a legtbbelterjedt audio- s video- formtum visszajtszst s rgztst, akrcsak a legtbb

    kpformtumot, mint pldul: MPEG4, H.264, MP3, AAC, AMR, JPG, vagy PNG.

    Fellet Manager a megjelentalrendszerhez trtnhozzfrseket manageli, sfolyamatosan kezeli a klnbzalkalmazsok ltal ellltott 2D s 3D grafikus rtegek

    akadlytalan megjelentst.

    LibWebCore korszerinternetbngszmotor, amely egyarnt kiszolglja az Android s abegyazott bngszket.

    SGL a 2D grafikus motor. 3D knyvtrak OpenGL ES 1.0 API-kra plimplementci; a knytrak vagy 3D

    hardware gyorstst hasznlnak (ahol elrhet) vagy egy optimalizlt 3D szoftveres

    raszterizert.

    FreeType bitmap s vector bettpus renderel. SQLite robosztus s pehelysly relcis adatbzismotor, amely minden alkalmazs

    szmra hozzfrhet.

    2.1.6. Android futsi krnyezetAz Android tartalmaz egy alap knytrat, amely megvalstja a Java programozsi nyelv

    funkcionalitsnak tlnyom rszt.

    Minden Android alkalmazs sajt szlon fut s sajt Dalvik virtulis gp pldnnyal rendelkezik.

    A Dalvik-ot gy rtk meg, hogy az eszkz tbb Virtulis Gpet is tudjon futtatni egyszerre

    hatkonyan. A Dalvik VM (Virtual Machine Virtulis Gp) Dalvik Futtathat Fjl (.dex)

  • 5/22/2018 Android Prog

    12/67

    12

    formtumot futtatja, amit minimlis memriahasznlatra optimalizltak. A VM regiszter-alap,

    s Java nyelvi fordtval ksztett osztlyokat futtat amelyeket .dex formtumra alaktottak akapcsold dx eszkzzel.

    A Dalvik VM a Linux kernelre tmaszkodik az alacsonyszint funkcionalitssal kapcsolatban,

    mint pldul a szlkezels vagy az alacsony szintmemriakezels.

    2.1.7. Linux kernelAz Android a 2.6 Linux verzira pl a rendszerszolgltatsokkal kapcsolatban, mint a biztonsg,

    memriakezels, szlkezels, hlzatkezels s meghajt modellek. A mag ezen fell

    absztrakcis rtegknt is viselkedik a hardver/ s a szoftverrteg kztt.

    2.2. Android alapelemekAz Android alkalmazsok Java programozsi nyelven kszlnek. Az Android SDK eszkzk

    fordtjk le a forrskdot a szksges adat s nyersanyag fjlokkal egytt egy Android

    csomagg, ami .apk kiterjesztssel rendelkezik. Egy .apk fjlban tallhat sszes kd egyetlen

    alkalmazsnak minsl, ez az a fjl amit az Android eszkzk fel tudnak hasznlni arra, hogyteleptsg az alkalmazst.

    Miutn felteleplek az eszkzre, minden Android alkalmazs a sajt biztonsgi homokozjban

    (sandbox) l tovbb:

    Az Android opercis rendszer egy tbbfelhasznls Linux rendszer, amiben mindenalkalmazs egy kln felhasznlknt jelenik meg.

    Alaphelyzetben a rendszer minden alkalmazsnak oszt egy egyedi Linux felhasznl ID-t (eztaz ID-t csak a rendszer hasznlja, az adott alkalmazs nem ismeri a sajt ID-jt). A rendszer

    lltja be a jogosultsgokat az alkalmazsban tallhat fjlokhoz, gy csak a megadott

    felhasznl ID-vel rendelkezalkalmazsok rhetik el.

    Minden folyamatnak sajt virtulis gpe (VM) van, gy egy adott alkalmazs kdjaelklntve fut az sszes tbbi alkalmazstl.

  • 5/22/2018 Android Prog

    13/67

    13

    Alaphelyzetben minden alkalmazs a sajt Linux folyamatt futtatja. Az Android elindtja afolyamatot, amikor az alkalmazs valamelyik komponenst futtatni kell, majd lelltja afolyamatot, amikor mr nincs r szksg vagy a rendszernek ms alkalmazsok szmra

    memrit kell felszabadtania.

    ly mdon az Android rendszer megvalstja a legkisebb jogosultsg elvt. Ez azt jelenti, hogy

    alaphelyzetben minden alkalmazs csak a szmra szksges komponensekhez fr hozz, s

    tbbhz nem. Ez egy nagyon biztonsgos krnyezetet teremt, amiben egy alkalmazs nem frhet

    hozz a rendszer olyan rszeihez amihez nincs jogosultsga.

    Ettl fggetlenl azonban van r md, hogy egy alkalmazs ms alkalmazsokkal osszon meg

    adatokat vagy rendszerszolgltatsokat rjen el:

    Megoldhat, hogy kt alkalmazs ugyanazt a Linux felhasznl ID-t hasznlja, gy ebben azesetben hozzfrhetnek egyms fjljaihoz. A rendszer erforrsok megfelel kihasznlsa

    rdekben az ugyanolyan felhasznl ID-vel rendelkezalkalmazsok futhatnak ugyanazon a

    Linux folyamaton s megoszthatjk ugyanazt a VM-et (az alkalmazsoknak ugyanazzal atanstvnnyal is kell rendelkeznik).

    Egy alkalmazs engedlyt krhet arra, hogy eszkz adatokhoz frjen hozz, mint pldul anvjegyzk, SMS zenetek, felcsatolhat trolk (SD krtya), kamera, Bluetooth, stb. Minden

    alkalmazs engedlyt a felhasznlnak kell megadnia teleptskor.

    Ezzel le is fedtk az alapokat azzal kapcsolatban, hogy hogyan is ltezik egy Android alkalmazs

    a rendszerben. A dolgozat htralvrszben bemutatjuk:

    A belskeretrendszer komponenseket, amelyek meghatrozzk az alkalmazst. A manifest fjlt, amiben deklarljuk az alkalmazs szmra szksges komponenseket s

    kszlk jellemzket.

    Azokat az erforrsokat, amelyek elklnlnek az alkalmazs kdjtl, s lehetv teszik azalkalmazs szmra, hogy knnyedn optimalizlja a viselkedst a klnbz eszkz

    konfigurcikon.

  • 5/22/2018 Android Prog

    14/67

    14

    Az alkalmazs komponensek az Android alkalmazsok alap ptkvei. Minden komponens egy

    pont, amin keresztl a rendszer be tud lpni az adott alkalmazsba. Nem minden komponenstnyleges belpsi pont a felhasznl szmra, ezen fell egyes komponensek egymstl

    fggenek, de mindegyik nll pldnyban ltezik s egy megszabott szerepet tlt be minden

    szerep egyedi ptelem ami segt meghatrozni az alkalmazs ltalnos viselkedst.

    Ngy alkalmazs komponens tpust klnbztetnk meg. Mindegyik tpus egy adott clt szolgl,

    s adott letciklusa van, ami meghatrozza hogyan jn ltre a komponens s hogyan sznik meg.

    Az alkalmazs komponensek ngy tpusa a kvetkez:

    Activity Szolgltatsok Broadcast receiver-ek Tartalom szolgtatk

    2.2.1. Activity-kEgy tevkenysg (Activity)egyetlen, felhasznli fellettel rendelkez kpernyt jelkpez.Pldul, egy email alkalmazsnak lehet egy tevkenysge, ami az j levelek listjt jelenti meg,

    egy msik tevkenysg a levlrst valstja meg, egy msik tevkenysg pedig a levlolvasst

    szolglja. Br a tevkenysgek egyttmkdve adnak ki egy teljeskr felhasznli lmnyt

    (levelezklienst), alapveten egymstl fggetlenek. Ezek alapjn egy msik alkalmazs

    elindthatja ezen tevkenysgek brmelyikt (amennyiben az email alkalmazs engedlyezi).

    Pldul, egy kamera alkalmazs elindthatja a levelezalkalmazs j levl tevkenysgt, hogy a

    felhasznl elkldhesse msoknak az adott fnykpet.

    Egy tevkenysget az Activity osztlyt kiterjesztalosztlyknt lehet megvalstani.

    2.2.1.1.Activity-k letciklusaA tevkenysgek letciklusnak kezelse callback (visszahv) metdusok implementlsval

    ltfontossg egy robosztus s rugalmas alkalmazs fejlesztshez. Egy tevkenysg letciklust

  • 5/22/2018 Android Prog

    15/67

    15

    kzvetlenl befolysolja a ms tevkenysgekkel val kapcsolata, feladatai s httr verme (back

    stack).

    Egy tevkenysg alapveten hrom llapotban lehet:

    Fut (Resumed): A tevkenysg a kijelzeltern van s birtokolja a felhasznli fkuszt.(Ezt az llapotot fut (running) llapotnak is szoktk nevezni)

    Felfggesztett (Paused):Egy msik tevkenysg van a kijelzeltern felhasznli fkusszal,de ez a tevkenysg tovbbra is lthat. Azaz, egy msik tevkenysg lthat erre a

    tevkenysgre rrajzolva, de az a tevkenysg vagy rszlegesen ttetsz

    vagy nem fedi le ateljes kijelzt. Egy felfggesztett tevkenysg teljes mrtkben l (az Activity objektum a

    memriban marad, megtartja az sszes llapot- s taginformcijt, s csatlakozva marad az

    ablakkezelhz), de a rendszer elpusztthatja kritikusan alacsony memriaszint esetn.

    Lelltott (Stopped): A tevkenysget teljes mrtkben lefedi egy msik tevkenysg (atevkenysg most a httrben van). Egy lelltott tevkenysg tovbbra is l (az Activity

    objektum a memriban marad, megtartja az sszes llapot- s taginformcijt, de nem

    csatlakozik az ablakkezelhz). Ugyanakkor mr nem lthat a felhasznl szmra, gy a

    rendszer brmikor elpusztthatja az objektumot, ha mshol van szksg az ltala lefoglalt

    memriaterletre.

    Ha egy tevkenysg felfggesztett vagy lelltott, a rendszer eltvolthatja a memribl vagy

    gy, hogy megkri, fejezze be a mkdst (meghvja a finish() metdust) vagy egyszeren

    lelltja a folyamatt. Amikor egy tevkenysget jra megnyitunk (miutn befejezdtt vagy

    elpusztult), jra ltre kell hozni.

    sszevetve ezeket a metdusok hatrozzk meg egy tevkenysg teljes letciklust. Ezen

    metdusok megvalstsval hrom begyazott ciklust kvethetnk nyomon a tevkenysg

    letciklusban:

    Ateljes letciklusaegy tevkenysgnek az onCreate() s az onDestroy() metdusokmeghvsa kztt zajlik. Az adott tevkenysgnek egy globlis llapot belltst kellene

    vgrehajtania (pldul a grafikus elemek elrendezse) az onCreate()metdusban, s minden

  • 5/22/2018 Android Prog

    16/67

    16

    erforrst el kell engednie az onDestroy() metdusban. Pldul, ha a tevkenysg a httrben

    futtat egy szlat adatok letltsre a hlzatrl, akkor illik, hogy az onCreate()ben hozzaltre, s az onDestroy()-ban sznteti meg azt a szlat.

    A lthat letciklusaegy tevkenysgnek az onStart() s az onStop()metdusok meghvsakztt zajlik. Ez id alatt a felhasznl ltja a tevkenysget a kijelzn s kommuniklhat

    vele. Pldul, az onStop() meghvsra kerl, amikor egy j tevkenysg indul s ez mr nem

    lthat. A fenti kt metdus kztt megtarthatjuk a szksges erforrsokat ahhoz, hogy

    megjelentsk a felhasznl szmra a tevkenysget. Pldul, regisztrlhatunk

    egy BroadcastReceiverobjektumot az onStart()metdusban, hogy nyomon kvessk azokata vltozsokat, amelyek hatssal vannak a felhasznli felletre (UI User Interface). Majd

    felszabadthatjuk az objektumot az onStop() metdusban, amikor a felhasznl mr nem

    lthatja, amit megjelentnk. A rendszer tbbszr is meghvhatja az

    onStart()s onStop()metdusokat egy tevkenysg teljes letciklusa sorn, mivel a

    tevkenysg vltogathat a felhasznl szmra lthat s nem lthat llapotai kztt.

    Az eltr letcilusaegy tevkenysgnek az onResume()s az onPause() metdusokmeghvsa kztt zajlik. Ez id

    alatt a tevkenysg minden ms tevkenysg el

    tthelyezkedik el a kijelzn s birtokolja a felhasznli fkuszt. Egy tevkenysg gyakran

    kerlhet ki s be az eltrbe pldul, az onPause()metdust kerl meghvsra, amikor az

    eszkz alv zemmdba vlt, vagy amikor megjelenik egy prbeszdablak. Mivel ez az

    llapot gyakran vltozik, a fenti kt metdus kztt kd lehetleg kicsi legyen a lass

    vltsok s a felhasznli vrakozs elkerlse vgett.

  • 5/22/2018 Android Prog

    17/67

    Az albbi bra bemutatj

    tvonalakat az llapotok kmegvalsthatjuk a tevk

    tmenet sorn.

    17

    ezeket a ciklusokat s a tevkenysg

    ztt. A tglalapok visszahv metdusokatnysg ltal vgrehajtand utastsokat az

    ltal bejrhat klnbz

    szimbolizlnak, amikbenegyes llapotok kztti

  • 5/22/2018 Android Prog

    18/67

    18

    A fenti visszahvs metdusok megtallhatak az albbi tblzatban is, amely rszletesebben

    lerja az egyes metdusok mkdst s helyt egy tevkenysg teljes letciklusban, illetve,hogy a rendszer megszntetheti-e a tevkenysget miutn a visszahvs metdus futsa

    befejezdik.

    Metdus Lers Ezutnmegszn-tethet?

    Kvetkez

    onCreate() A tevkenysg ltrehozsakor hvdikmeg. Itt kell az sszes normlis statikus

    belltst elvgezni nzetek ltrehozsa,adatok listkhoz ktse, stb. Ez a metdusmegkap egy Bundle objektumot, amely atevkenysg elz llapott tartalmazza,amennyiben az rgztsre kerlt(lsd Tevkenysg llapotok Trolsa,fejezet).Minden esetben az onStart() metduskveti.

    Nem onStart()

    onRestart() Egy lelltott tevkenysg jra elindtsaeltt kzvetlenl kerl meghvsra.Minden esetben az onStart() metduskveti.

    Nem onStart()

    onStart() Egy tevkenysg a felhasznl szmralthatv vlsa eltt kzvetlenl kerlmeghvsra.Az onResume()metdus kveti, ha atevkenysg az eltrbe kerl, vagyaz onStop()ha rejtett vlik.

    Nem onResume()vagyonStop()

    onResume() Kzvetlenl az eltt kerl meghvsramieltt egy tevkenysg interaktvv vlnaa felhasznl szmra. Ezen a ponton atevkenysg a tevkenysg-verem tetejnvan, s felhasznli inputot fogad.Minden esetben az onPause() metduskveti.

    Nem onPause()

    onPause() Akkor kerl meghvsra, mikor a rendszeregy msik tevkenysget kszl folytatni(jraindtani). Ennek a metdusnak atipikus felhasznlsa az el nem mentett

    Igen onResume()vagyonStop()

  • 5/22/2018 Android Prog

    19/67

    19

    Metdus Lers Ezutn

    megszn-tethet?

    Kvetkez

    vltozsok elmentse perzisztens adatt,animcik lelltsa s ms dolgok amik aprocesszor erforrst foglalhatjk, stb.Brmit is tesz azonban, azt j ha nagyongyorsan teszi, mert a kvetkeztevkenysg nem kerl tnylegesenfolytatsra (jraindtsra) amg ez ametdus vissza nem tr.Az onResume() metdus kveti

    amennyiben a tevkenysg visszatr azeltrbe, vagy az onStop() ha a felhasznlszmra lthatatlann vlik.

    onStop() Ez a metdus akkor kerl meghvsra,mikor a tevkenysg mr nem lthat afelhasznl szmra. Ez trtnhet azrt,mert a tevkenysg objektum megsznik,vagy mert egy msik tevkenysg (akr j,akr mr ltez) jraindtsra kerlt seltakarja a kijelzn.Az onRestart() metdus kveti, ha atevkenysg visszatr a felhasznlszmra interaktv llapotba, vagyaz onDestroy()ha a tevkenysg vglegmegsznni kszl.

    Igen onRestart()vagyonDestroy()

    onDestroy() A tevkenysg megsznsekor kerlmeghvsra. Ez a legutols hvs amit atevkenysg megkap. Trtnhet azrt,mert a tevkenysg befejezdik (valakimeghvta r a finish()metdust), vagymert a rendszer tmenetileg megsznteti a

    tevkenysg pldnyt, hogy trhelyetszabadtson fel. A kt vltozat kztt azisFinishing() metdus segtsgvel tudunkklnbsget tenni.

    Igen semmi

    Az "Ezutn megszntethet?" oszlop azt mutatja, hogy a rendszer megszntetheti-e a

    tevkenysget kiszolgl folyamatot brmikor az adott visszahv metdus lefutsa utn anlkl,

  • 5/22/2018 Android Prog

    20/67

    20

    hogy akr a tevkenysg egyetlen tovbbi sor kdjt is vgrehajtan. Hrom metdus kapott

    Igen cmkt: (onPause(), onStop(), s onDestroy()). Mivel az onPause() az els ebbl ahrmasbl, miutn a tevkenysg pldny ltrejn, az onPause() lesz az a metdus amely

    garantltan meghvsra kerl mieltt a folyamatot meg lehet szntetni. Amennyiben a

    rendszernek vszhelyzet esetn memrit kell felszabadtani, akkor az onStop() s onDestroy()

    metdusok lehet, hogy nem is kerlnek meghvsra. Ebbl kifolylag javasolt

    az onPause()metdusban elhelyezni minden fontos perzisztens adat (pldul felhasznli adatok)

    eltrolsra vonatkoz kdot. Ugyanakkor rdemes nagyon jl megvlogatni, hogy mit kell

    az onPause()segtsgvel eltrolni mert brmilyen hossz, blokkol eljrs ebben a metdusban

    blokkolja a kvetkeztevkenysgre val tvltst, s lasstja a felhasznli lmnyt.

    Az "Ezutn megszntethet?" oszlopban Nem cmkvel elltott metdusok megvdik a

    tevkenysget kiszolgl folyamatot a megszntetssel szemben attl a pillanattl kezdve, hogy

    meghvsra kerltek. gy egy tevkenysg az onPause()visszatrse s az onResume() meghvsa

    kztt megszntethet, de egszen addig vdettsget lvez, amg az onPause() jra meghvsra

    nem kerl s lefut.

    2.2.2. SzolgltatsokEgy szolgltatsegy olyan komponens, amely a httrben fut s hossztv mveleteket vgez,

    vagy tvoli folyamatok szmra dolgozik. Egy szolgltats nem nyjt felhasznli felletet.

    Pldul, egy szolgltats zent jtszhat le a httrben, amg a felhasznl egy msik

    alkalmazsban van, vagy adatot tlt le a hlzatrl anlkl, hogy a felhasznlt akadlyozn ms

    tevkenysgek hasznlatban. Egy msik komponens, pldul egy tevkenysg, elindthat egy

    szolgltatst s hagyhatja futni, vagy r is csatlakozhat, hogy kommunikljon vele.

    2.2.3. Broadcast receiver-ekEgy zenetszrs fogad (broadcast receiver) egy olyan komponens, amely rendszer-szint

    broadcast zenetekre reagl. A legtbb zenetszrs (broadcast) a rendszertl ered pldul egy

    ilyen zenetszrs jelezheti, hogy a kijelz kikapcsolsra kerlt, alacsony az akkufeszltsg,

    vagy fnykp kszlt. Az alkalmazsok is kezdemnyezhetnek zenetszrst pldul, hogy

  • 5/22/2018 Android Prog

    21/67

    21

    ms alkalmazsokkal tudassk, hogy valamilyen adat letltsre kerlt az eszkzre s elrhetvlt

    szmukra. Br az zenetszrs fogadk nem jelentenek meg felhasznli felletet, a sttuszmezre (status bar) rhatnak, hogy figyelmeztessk a felhasznlt, amikor egy zenetszrs

    esemny trtnik. Gyakoribb azonban, hogy egy zenetszrs fogad csak egyszer tjr

    (gateway) ms komponensekhez, s csak nagyon minimlis munka elvgzsre terveztk. Pldul

    elindthat egy szolgltatst, ami majd elvgzi a megfelelmunkt egy esemny bekvetkeztekor.

    2.2.4. Tartalom szolgltatkEgy

    tartalomszolgltat (content provider) alkalmazs adatok egy megosztott halmazt kezeli.

    Adatot trolhatunk a fjlrendszerben, egy SQLLite adatbzisban, a weben, vagy brmely ms

    perzisztens trhelyen amit az alkalmazsunk elr. A tartalomszolgltatn keresztl ms

    alkalmazsok lekrdezhetik vagy akr mdosthatjk is az adatokat (amennyiben a

    tartalomszolgltat engedi ezt). Pldul, az Android rendszer rendelkezsre bocst egy

    tartalomszolgltatst, amely a felhasznl nvjegyzk adatait kezeli. Ennek segtsgvel brmely,

    megfelel jogosultsggal rendelkez alkalmazs megkrheti a tartalomszolgltatt (mint a

    ContactsContact.Data) hogy rja vagy olvassa egy adott szemly kapcsolatinformciit.

    A tartalomszolgltatk hasznosak az alkalmazs szmra kizrlagos (nem megosztott) adatok

    olvassra/rsra is.

    Egy tartalomszolgltatt a ContentProvider alosztlyaknt kell megvalstani, tovbb

    implementlnia kell API-k egy szabvnyos halmazt is amely ms alkalmazsok szmra ad

    lehetsget tranzakcik vgrehajtsra.

    2.2.5. Intent-ek s intent szrkEgy alkalmazs kzponti komponensei kzl hrmat tevkenysgek, szolgltatsok s

    zenetszrs fogadk zenetekkel, intent-ekkel (intent szndk) aktivlhatunk. Az intent

    zenet egy olyan megolds, amellyel ksi, futsi idej kts kpezhet az egy alkalmazson

    belli, vagy pp klnbz alkalmazsok komponensei kztt. Az intent maga, ami

    Intent objektum, egy passzv adatstruktra, ami a vgrehajtand mvelet absztrakt lerst

    tartalmazza vagy gyakran zenetszrsok esetn, valami megtrtntnek a lerst tartalmazza,

  • 5/22/2018 Android Prog

    22/67

    22

    amit a rendszer gy kzztesz. A klnbz tpus komponensek szmra klnfle

    mechanizmusok lteznek az intentek clbajuttatsra:

    Egy Intent objektum kerl tadsra aContext.startActivity() vagy Activity.startActivityForResult() metdusoknak, ha egy j

    tevkenysg indtsra vagy egy mr ltez tevkenysg valamilyen j mveletnek

    elindtsra van szksg. (az objektumot az Activity.setResult() metdusnak is t lehet adni,

    hogy a startActivityForResult()metdust tevkenysg szmra adjunk vissza informcit.)

    Egy Intent objektum kerl tadsra a Context.startService() metdusnak, hogy elindtsunkegy szolgltatst vagy egy mr ltez szolgltats szmra j utastsokat adjunk.

    Hasonlkpp, az intent objektumot a Context.bindService()metdusnak is tadhatjuk a hv

    komponens s a clszolgltats kztti kapcsolat kialaktsra. Opcionlisan magt a

    szolgltatst is elindthatja, ha az mg nem fut.

    Intent objektumot brmilyen zenetszr metdusnak is tadhatunk (pldulContext.sendBroadcast(), Context.sendOrderedBroadcast() ,

    vagy Context.sendStickyBroadcast() ), amit aztn minden rintett zenetszrs fogad

    megkap. Sokfle zenetszrs a rendszerkdbl szrmazik.

    A fenti esetek mindegyikben az Android rendszer megkeresi a megfelel tevkenysget,

    szolgltatst vagy zenetszrs fogadk halmazt, ami az intentre vlaszol, s pldnyostja is

    azokat, amennyiben szksges. Nincs tfeds ezen zenetkzvett rendszerek kztt: Az

    zenetszrs intenteket csak zenetszrs fogadkhoz tovbbtja, s soha nem tevkenysgekhez

    vagy szolgltatsokhoz. A startActivity() metdusnak tadott intent csak egy tevkenysghez

    kerlhet, s soha nem szolgltatshoz, vagy zenetszrs fogadhoz, stb.

    A kvetkez oldalakon az Intent objektumok lersa tallhat. Azutn azokat a szablyokat

    mutatjuk be, amelyeket az Android alkalmaz az intentek komponensekre val lekpezshez

    hogyan tallja meg, hogy melyik intent zenetet melyik komponensnek kell megkapnia. Azokat

    az intenteket amelyek nem mondjk meg explicit mdon, hogy mi a clkomponensk, ez az

    eljrs teszteli le intent szrkkel, hogy megtallja a lehetsges clpontjaikat.

  • 5/22/2018 Android Prog

    23/67

    23

    Intent Objectumok

    EgyIntentobjektum nem ms, mint adatok egy halmaza. Olyan informcikat tartalmaz,amelyek az intent objektumot megkap komponens szmra rdekesek (pl. a vgrehajtand

    mvelet vagy feldolgozsra vr adat cme). Ezen fell tartalmaz az Android rendszer szmra

    lnyeges informcikat is (pl. az intent clpontjul szolgl komponens kategrija, vagy a

    cltevkenysg elindtsra szolgl utastsok).

    Egy intent szr az IntentFilterosztly egy pldnya. Mivel azonban az Android rendszernek

    ismernie kell az adott komponens tulajdonsgait mieltt el tudja azt indtani, az intent szrket

    ltalban nem a Java kdban inicializljk, hanem az alkalmazs manifest fjljban,

    (AndroidManifest.xml) elemekben. (Az egyetlen kivtel ez all az zenetszrs

    fogadkra vonatkoz szrk, amelyeket dinamikusan regisztrlhatunk a

    Context.registerReceiver() hvsknt, IntentFilterosztly pldnyostssal.)

    Egy szregyarnt tartalmaz egy Intent objektum mveletre, adatra s kategrijra vonatkoz

    mezket. Egy implicit intentet mindhrom terleten megvizsglunk a szrvel. Ahhoz, hogy a

    szrt birtokl komponens megkapja az Intent objektumot, mindhrom teszten t kell mennie. Ha

    csak az egyiken is elbukik, az Android rendszer nem fogja tadni az Intent objektumot a

    komponensnek legalbbis nem az adott szralapjn. Ugyanakkor, mivel egy komponensnek

    tbb szrje is lehet, attl hogy az intent objektum fennakad a komponens egyik szrjn, mg

    tmehet egy msikon.

    A kvetkezkben rszletesen bemutatjuk a hrom tesztet:

  • 5/22/2018 Android Prog

    24/67

    24

    Mvelet teszt

    A manifest fjlban tallhat elem a mveleteket alelemekknt sorolja fel.Pldul:

    ...

    Ahogy a plda is mutatja, mg egyIntentobjektum csak egyetlen mveletet nevez meg, egy szr

    akr tbbet is megnevezhet. A lista nem lehet res; egy szrnek legalbb egy elemet

    tartalmaznia kell, vagy minden intent objektumot blokkolni fog.

    Ahhoz, hogy az Intent objektum tmenjen ezen a teszten, a mveletnek meg kell egyeznie a

    szrben felsorolt mveletek egyikvel. Amenyiben az objektum vagy a szr nem ad meg

    tevkenysget, az eredmny az albbiak szerint alakul:

    Ha a szr nem tartalmaz mveleti listt, az intent objektum mvelete semmivel sem tudmegegyezni, gy minden intent objektum el fog bukni a teszten. Egyetlen intent objektum

    sem fog tmenni a szrn.

    Msrszt, ha az Intent objektum nem ad meg mveletet, akkor automatikusan tmegy ateszten amennyiben a szrlegalbb egy mveletet tartalmaz.

    Kategria teszt

    Az elem kategrikat is felsorol alelemknt. Pldul:

    ...

  • 5/22/2018 Android Prog

    25/67

    25

    Ahhoz, hogy egy intent objektum tmenjen a kategria teszten, az objektumban tallhat sszes

    kategrinak meg kell egyeznie a szrben megadott kategrik valamelyikvel. A szrtartalmazhat tovbbi kategrikat, de az intent egyetlen kategrijt sem hagyhatja ki.

    Elvileg gy egy kategrik nlkli Intentobjektumnak mindig t kellene mennie a teszten, a szr

    tartalmtl fggetlenl. Ez javarszt igaz is. Azonban, egyetlen kivtellel, az Android minden, a

    startActivity()metdusnak tadott implicit intentet gy kezel, mintha azok legalbb egy

    kategrival rendelkeznnek: "android.intent.category.DEFAULT "

    (aCATEGORY_DEFAULTconstans). gy az implicit intent objektumok fogadsra hajland

    tevkenysgek szrinek tartalmaznia kell az "android.intent.category.DEFAULT " elemet. (Az

    "android.intent.action.MAIN " s "android.intent.category.LAUNCHER " belltsokat tartalmaz

    szrk kivtelek. Ezek olyan tevkenysgeket jellnek amelyek j feladatok kezdenek s az

    inditkpernyn jelennek meg. Tartalmazhatjk az "android.intent.category.DEFAULT " rtket

    is a kategria listban, de nem szksges.)

    Adat teszt

    Akrcsak a mveletek s kategrik esetben, az adat specifikcik is alelemknt jelennek meg a

    szrben. s csakgy, mint a fenti kt esetben, itt is tbb alelem szerepelhet a listban, vagy akr

    nulla is. Pldul:

    ...

    Mindenelem egy URI-t s egy adat tpust (MIME mdia tpus) ad meg. Az URI mindenrsznek kln attribtuma van scheme, host, port, and path :

    scheme://host:port/path

    Pldul, az albbi URI-ban,

    content://com.example.project:200/folder/subfolder/etc

  • 5/22/2018 Android Prog

    26/67

    26

    a scheme (sma) "content", a host az "com.example.project", a port "200", s a path (tvonal)

    pedig "folder/subfolder/etc". A host s a port egytt adja meg az URI hatskrt; amennyibennincs host megadva, akkor a port figyelmen kvl marad.

    Az attribtumok mindegyike opcionlis, de egymstl nem fggetlenek: Ahhoz, hogy egy

    hatskr rtelmes legyen, a smt is meg kell adni. Ahhoz, hogy az tvonal rtelmes legyen, a

    smt s a hatskrt egyarnt meg kell adni.

    Amikor egy Intent objektum URI-ja sszehasonltsra kerl egy szr URI specifikcijval,

    voltakppen a szrben tnylegesen megadott URI attribtumok kerlnek sszehasonltsra.

    Pldul, ha a szrcsak a smt adja meg, akkor a megfelelsmval rendelkezsszes URI t

    fog menni a teszten. Ha a szregy smt s hatskrt ad meg, de tvonalat nem, az sszes URI

    t fog menni a teszten, ha megfelel smval s hatskrrel rendelkezik, tvonaltl fggetlenl.

    Ha a szr smt, hatskrt s tvonalat egyarnt megad, akkor csak az ugyanolyan smval,

    hatskrrel s tvonallal rendelkez URI-k fognak tmenni. Ugyanakkor, egy tvonal

    specifikci tartalmazhat joker karaktereket is, ha csak rszleges tvonal illeszkedsre van

    szksg.

    A elem type attribtuma adja meg az adat MIME tpust. Ez jval gyakoribb a szrkben,

    mint az URI hasznlata. Az Intent objektum s a szregyarnt hasznlhat "*" joker karaktert az

    altpus mezben pldul "text/*" vagy "audio/*" altpus egyezsekhez.

    Az adat teszt egyarnt sszehasonltja az URI-t s az adattpust is az Intentobjektum s a szr

    kztt. A szablyok a kvetkezk:

    a. Az az Intent objektum, amely nem tartalmaz sem URI-t sem adat tpust csak abban azesetben megy t a teszten, ha az sem tartalmaz semmilyen URI-t vagy adat tpust.

    b.Az az Intent objektum, amely tartalmaz URI-t de nem tartalmaz adat tpust (s nem is lehetkikvetkeztetni az URI-bl valamilyen tpust) csak abban az esetben megy t a teszten, ha az

    URI-ja megegyezik a szrben megadott URI-k valamelyikvel s a szr szintn nem

    tartalmaz egyetlen tpus specifikcit sem. Ez az eset fog bekvetkezni

    a mailto:s tel:tpus URI-knl, amelyek nem hivatkoznak tnyleges adatra.

  • 5/22/2018 Android Prog

    27/67

    27

    c. Az az Intentobjektum, amely tartalmaz adat tpust, de nem tartalmaz URI-t csak abban azesetben megy t a teszten, ha a szr ugyanazt az adattpust felsorolja, s nem tartalmazsemmilyen URI-t.

    d.Az az Intent objektum, amely egyarnt tartalmaz URI-t s adat tpust (vagy az adat tpuskikvetkeztethetaz URI-bl) csak abban az esetben megy t a teszten, ha a szrfelsorolja

    magban az adott adat tpust. tmegy a teszt URI rszn akkor is ha az URI-ja megegyezik a

    szrben felsorolt URI-k valamelyikvel, vagy egy content:vagy file:URI-t tartalmaz s a

    szr nem tartalmaz egyetlen URI-t sem. Ms szval, egy komponensrl azt felttelezi a

    rendszer, hogy tmogatja a content:s file:adatokat ha a szrje csak adatpusokat sorol fel.Ha egy intent tbb tevkenysg vagy szolgltats szrjn is tmegy, akkor a felhasznl

    szmra is rkezhet krds, hogy melyik komponenst szeretn aktivlni. Ha egyetlen clpont sem

    tallhat, kivtel keletkezik.

    ltalnos esetek

    Az adat tesztben lert utols szably (d. szably) azt az elvrst tkrzi, hogy a komponensek

    kpesek loklis adatok fogadsra fjlbl vagy tartalomszolgltattl. gy a szriknek elg hacsak egy adattpust adnak meg, s nem szksges explicit megneveznik a

    content:s file:smkat. Ez egy tipikus eset. Mint pldul az albbi elem, ami azt mondja

    meg az Androidnak, hogy a komponens kpes egy tartalomszolgltattl kpadatokat fogadni s

    megjelenteni:

    Mivel a legtbb elrhetadatot tartalomszolgltatk nyjtjk, taln a leggyakoribb szrk azok,

    amelyek adattpust meghatroznak, de URI-t nem.

    Egy msik gyakori konfigurci, ha a szrsmt s adat tpust tartalmaz. Az albbi elem

    pldul azt mondja meg az Androidnak hogy a komponens kpes a hlzatrl video adatok

    fogadsra s megjelentsre:

  • 5/22/2018 Android Prog

    28/67

    28

    Gondoljuk t pldul, hogy mit csinl egy bngsz alkalmazs, amikor a felhasznl rkattint

    egy linkre a megjelentett weboldalon. Elszr megprblja megjelenteni az adatot (ami

    sikerlne is, ha a link HTML oldalra mutatna). Ha nem tudja megjelenteni az adatot, sszellt

    egy implicit intent objektumot a sma s adat tpussal, majd megprbl elindtani egy olyan

    alkalmazst, ami el tudja vgezni a munkt. Ha nincs jelentkez, akkor megkri a letlts kezelt,

    hogy tltse le az adatot. Az egy tartalomszolgltat fennhatsga al helyezi az adatot, gy

    tevkenysgek egy feltehetleg nagyobb csoportja (azok, amelyeknek a szri csak adattpusokat

    neveznek meg) vlaszolhat a feladatra.

    2.3. AndroidManifest.xmlMieltt az Android rendszer elindthat egy tevkenysg komponenst, tudnia kell, hogy a

    komponens ltezik azltal, hogy felolvassa az alkalmazsAndroidManifest.xmlfjljt (a

    "manifest" fjlt). Az alkalmazsunknak minden komponenst deklarlnia kell ebben a fjlban,

    aminek az alkalmazs knyvtrnak gykerben kell elhelyezkednie.

    A manifest egy sor tovbbi dolgot is ellt az alkalmazs komponenseinek deklarlsn tl, mint

    pldul:

    Lerja az alkalmazs szmra szksges felhasznli jogosultsgokat, mint pldul azInternet elrs, vagy nvjegyzk-olvassi engedly.

    Deklarlja az alkalmazs szmra szksges minimum API szintet, az alkalmazs alapjnhasznlt API-k alapjn.

    Deklarlja az alkalmazs szmra szksges hardver s szoftver paramtereket, mint pldula kamera, bluetooth szolgltatsok, vagy multitouch kijelz.

    Az alkalmazs szmra szksges API knyvtrakat (az Android keretrendszer API-kon tl),mint pldul a Google Maps knyvtr.

  • 5/22/2018 Android Prog

    29/67

    29

    Komponensek deklarlsa

    A manifest fjl elsdleges feladata a rendszer tjkoztatsa az alkalmazs komponenseirl.

    Pldul a manifest fjl a kvetkezkpp deklarlhat egy tevkenysget:

    ...

    Az elemben az android:iconattribtum az alkalmazs ltal hasznlt ikont

    lokalizlja.

    Az elemben az android:nameattribtum az Activity osztlybl szrmaztatott alosztly

    teljes minstett nevt tartalmazza, az android:labelattribtum pedig a tevkenysg a felhasznl

    ltal lthat cmkt adja meg.

    Egy alkalmazs sszes komponenseit az albbiak szerint kell deklarlni:

    elemek az tevkenysgekhez elemek a szolgltatsokhoz elemek az zenetszrs fogadkhoz elemek a tartalomszolgltatkhoz

    Azok a tevkenysgek, szolgltatsok s tartalomszolgltatsok, amelyeket meghivatkozunk a

    forrskdunkban, de nem deklarlunk a manifest fjlban nem lthatak a rendszer szmra, gy

    ebbl kifolylag soha nem futhatnak le. Ugyanakkor az zenetszrs fogadkat deklarlhatunk a

    manifest fjlban vagy dinamikusan a forrskdban is (mint BroadcastReceiverobjektumok)

    amiket registerReceiver() metdus hvsval regisztrlhatunk a rendszerben.

  • 5/22/2018 Android Prog

    30/67

    30

    2.4. Felhasznli felletEgy Android alkalmazs esetn a felhasznli fellet Views ViewGroupobjektumbl pl fel.Sokfle tpus nzet s nzetcsoport ltezik, melyeknek mindegyike a View osztly

    leszrmazottja.

    Az Android platform alap ptkvei a View objektumok. A View osztly a widget-eknek

    nevezett alosztlyok se, amik teljesen implementlt UI (User Interface Felhasznli Fellet)

    objektumok, mint egy szvegmez vagy gomb. A ViewGroup osztly pedig a layout-oknak

    (elrendezseknek) nevezett alosztlyok se, amelyek klnfle elrendezsi stratgikat knlnak,

    mint a lineris, tabulris, relatv elrendezs, stb.

    Egy View objektum egy olyan adatstruktra, aminek mezi az elrendezsi paramtereket s a

    kijelz egy megadott tglalap alap terletnek tartalmt tartalmazzk. Egy View objektum

    kezeli a sajt mretezst, elrendezst, rajzolst, fkusz kezelst, grgetst, billenty/rints

    kezelst a kijelz azon tglalap alap terletn, amelyet elfoglal. A felhasznli fellet

    objektumaknt a View ugyanakkor a felhasznl s az eszkz kztti interakcis pont.

    2.4.1. Megjelentelemek hieachijaAz Android platformon egy Tevkenysg (Activity) felhasznli fellett View s ViewGroup

    csompontokkal hatrozhatunk meg, ahogy ezt a lenti bra is mutatja. Ez a hierarchia fa lehet

    nagyon egyszer vagy akr nagyon bonyolult is az adott alkalmazstl fggen. Knnyedn

    felpthetnk egyet az Android elre definilt widgetei s layoutjai, valamit a sajt magunk ltal

    ltrehozott View-k segtsgvel.

  • 5/22/2018 Android Prog

    31/67

    Ahhoz, hogy az adott vie

    kell hvnia a setContentVi

    Android rendszer megkapj

    hierarchia gykr csompo

    akik azutn meghvjk a

    krhetnek pozcit s mre

    egyes gyerekek mretrl

    hierarchia fa tetejtl kez

    kirajzolsi folyamat inord

    terlete/pozcija tfedi eg

    sszes alatta lvobjektu

    Elrendezs

    A legltalnosabb mdja

    segtsgvel trtnik. Az

    Minden elem az XML-b

    leszrmazottja). A View o

    (lsd fenn a View Hierarch

    31

    hierarchia ft hozzcsatoljon a kijelzhz

    ew() metdust, amiben tadja a gykr cso

    ezt a referencit, majd ezt felhasznlva mr

    ntja megkri a gyermek csompontjait, hogy

    sajt gyermekcsompontjaikat, s gy tovb

    tet a szln bell, de a vgsdnts a szl

    . Az Android inorder bejrssal rtkeli

    ve), gy hozza ltre a View-kat s csatolj

    er jellege miatt ha vannak olyan elemek

    ymst, akkor a legutoljra kirajzoland obj

    ot az adott terleten.

    az definilsnak s a view herarchia me

    XML egy ember ltal olvashat formtum

    n vagy egy View vagy egy ViewGrou

    jektumot a fa levlelemei, a ViewGroupo

    ia brt).

    , a Tevkenysgnek meg

    mpont referencijt. Az

    tezi s rajzolja ki a ft. A

    rajzoljk meg nmagukat

    . A gyerek csompontok

    objektum kezben van az

    i az egyes elemeket (a

    hozz a szl(k)hz. A

    a fban, amelyeknek a

    ktum el fogja takarni az

    adsnak egy XML fjl

    ot nyjt, mint a HTML.

    objektum (vagy annak

    jektumok pedig a fa gai

  • 5/22/2018 Android Prog

    32/67

    32

    Egy XML elem neve a megfelel Java osztly nevt tkrzi. gy egy elem egy

    TextView objektumot, mg egy elem egy LinearLayout viewgroup objektumothoz ltre a UI-n. Amikor betltnk egy elrendezst, az Android rendszer az elrendezs elemeinek

    megfelelen inicializlja ezeket a futsi-idejobjektumokat.

    Pldul, egy egyszerfggleges elrendezs egy text view-al s egy gombbal a kvetkezkppen

    nz ki:

    Figyeljk meg, hogy a LinearLayoutelem egyarnt tartalmazza a TextViews Buttonelemeket

    is. Lehetsgnk van egy msik LinearLayout (vagy brmilyen ms view group tpus)

    begyazsra is itt, ha nvelni szeretnnk a view hierarchit s sszetettebb elrendezseket

    kszteni.

    Felhasznli felletek ptsvel kapcsolatosan rszletesebb informcikat tall az Elrendezsek

    Deklarlsa c. fejezetben.

    Tipp:View s ViewGroup objektumokat Java kdbl is kirajzolhatunk az addView(View)

    metdusokkal, amiknek segtsgvel dinamikusan adhatunk a nzethez j Views ViewGroup

    objektumokat.

    A view objektumaink elrendezshez tbbfle mdszer is ltezik. A klnbz view groupok

    segtsgvel vgtelen szm lehetsgnk van a gyermek view s view groupok elrendezsre.

  • 5/22/2018 Android Prog

    33/67

    33

    Az Android ltal knlt elre definilt view groupok (amelyeket elrendezseknek neveznk) kz

    tartozik a LinearLayout, RelativeLayout, TableLayout, GridLayout s msok. Ezek mindegyikeegyedi elrendezsi paramtereket knl, amelyek segtsgvel definilhatjuk a gyermek view-k

    pozcijt s elrendezsi struktrjt.

    Widget-ek

    A widget egy View objektum, amely kapcsoldsi pontot nyjt a rendszer s a felhasznl

    kztti interakcira. Az Android egy sor leimplementlt widget-et knl, pldul gombok,

    szvegbeviteli mez

    k, jell

    ngyzetek, stb. formjban, amikkel gyorsan fel tudunk pteni egyfelhasznli felletet. Nhny sszetettebb, az Android ltal knlt widget pldul a dtum

    kivlaszt, ra, vagy kicsinyts/nagyts funkcik. Termszetesen nem csak az Android ltal

    knlt widget-eket hasznlhatjuk. Ha egyedi elemekre van szksgnk, sajt View objektum

    ltrehozsval, vagy a mr ltezwidget-ek kiterjesztsvel s kombinlsval megalkothatjuk a

    sajt widget-einket.

    Az Android ltal knlt sszes widget megtekintshez az android.widget csomagot rdemes

    tnzni.

    UI Esemnyek

    Miutn hozzadtunk nhny View-t/widget-et a felhasznli fellethez, nylvn szeretnnk tudni

    rla, amikor a felhasznl hasznlja ket, hogy klnfle mveleteket vgezhessnk azok

    hatsra. Hogy rtestst kapjunk a UI esemnyekrl, az albbi kt dolog egyikre van

    szksgnk:

    Definiljunk egy esemny figyelt s csatoljuk hozz a View-hoz.Ez a gyakoribb mdjaaz esemnyekre val figyelsnek. A View osztly tartalmaz begyazott interfszek egy

    gyjtemnyt (OnListener nevekkel), amelyek mindegyiknek van egy visszahv

    metdusa is On() nven. Pldul, View.OnClickListener (a View-n trtn

    kattintsok kezelshez), View.OnTouchListener (a View-n trtn rintkperny

    esemnyek kezelshez), s View.OnKeyListener (a View-n trtneszkz gombnyomsok

  • 5/22/2018 Android Prog

    34/67

    34

    kezelshez). gy ha azt akarjuk, hogy a View-nk rtestve legyen ha rkattintanak

    (pldul kivlaszt a felhasznl rajta egy gombot), implementljuk le az OnClickListenerinterfszt s definiljuk az onClick() visszahv metdust (ahol megadhatjuk a kattints

    esemnyre trtn utestsokat), s csatoljuk hozz a View-hoz a setOnClickListener()

    metdussal.

    Definiljunk fell egy mr ltez visszahv metdust a View-ban. Erre akkor lehetszksgnk, ha sajt View osztlyt implementltunk s bizonyos esemnyekre szeretnnk

    figyelni azon bell. Lekezelhet pldaesemnyknt meg lehet itt emlteni a kperny

    megrintst (onTouchEvent()), a trackball mozgatst (onTrackballEvent()), vagy amikor

    az eszkz egyik gombjt lenyomja a felhasznl (onKeyDown()). Ennek segtsgvel a sajt

    View-nkon bell minden esemnyre kln meghatrozhatjuk a megfelel viselkedst s

    eldnthetjk, hogy az adott esemnyt esetleg tovbbtjuk-e egy msik gyermek View-nak.

    Hangslyozzuk, hogy ezek a visszahv metdusok a View osztlyhoz tartoznak, gy az

    egyetlen eslynk, hogy definilhassuk ket az, ha sajt komponenst hozunk ltre.

    Menk

    A men egy msik fontos rsze az alkalmazs felhasznli felletnek. A menk egy megbzhat

    interfszt knlnak a felhasznlnak, amiken keresztl elrheti az alkalmazs klnbzfunkciit

    s belltsait. Legltalnosabb alkalmazs men az eszkz MENU gombjnak megnyomsval

    rhet el. Ezen tl azonban lehetsgnk van Krnyezetfgg Menk (Context Menu)

    ltrehozsra is, amelyeket akkor jelenthetnk meg amikor a felhasznl lenyomva tartja a

    gombot/ujjt egy elemen.

    A menket szintn a View hierarchival lehet strukturlni, de ez esetben nem mi definiljuk a

    stuktrt. Ehelyett az onCreateOptionsMenu()vagy onCreateContextMenu()visszahv

    metdusokat definiljuk a Tevkenysgnkhz, majd megadjuk azokat az elemeket, amiket a

    menben szerepeltetni szeretnnk. A megfelel idben az Android automatikusan ltrehozza a

    szksges View hierarchit a menhz s kirajzolja az egyes menelemeket.

    A menk szintn kezelik a sajt esemnyeiket, gy nem szksges esemnyfigyelket regisztrlni

    a menelemekhez. Amikor egy menelem kivlasztsra kerl, az

  • 5/22/2018 Android Prog

    35/67

    35

    onOptionsItemSelected() vagy onContextItemSelected() metdus kerl meghvsra a

    keretrendszer ltal.

    s akrcsak az alkalmazs elrendezs esetben, itt is lehetsgnk van XML fjlban megadni az

    egyes menelemeket.

    2.4.2. UI definils XML-benAz elrendezs az a szerkezet, amin keresztl a felhasznl kapcsolatba lphet egy

    Tevkenysggel. Ez definilja a felhasznl szmra megjelen elemek elhelyezst. Egy

    elrendezst ktflekppen deklarlhatunk:

    UI elemek deklarlsa XML-ben. Az Android egy egyrtelm XML nyelvezetet knl,amely sszhangban van a Viewosztlyokkal s alosztlyokkal, mint pldul a widget-ek s

    elrendezsek.

    Elrendezs elemek pldnyostsa futsi idben. Az alkalmazsunk futs kzben kdblis kpes Views ViewGroupobjektumokat ltrehozni (s a tulajdonsgaikat vltoztatni).

    Az Android keretrendszer elg rugalmas ahhoz, hogy a fenti kt mdbl egyiket, vagy akregyszerre mindkettt felhasznljuk az alkalmazsunk felhasznli felletnek kialaktshoz s

    kezelshez. Pldul, megadhatjuk XML-ben az alkalmazs alapvet elrendezseit, belertve az

    egyes elemeket s tulajdonsgaikat, amelyek majd megjelennek a kpernyn. Ezek utn rhatunk

    olyan kdrszeket az alkalmazsba, amelyek futsi idben vltoztatjk az XML-ben deklarlt

    elemek paramtereit.

    Az XML-ben trtn UI megads azzal az elnnyel jr, hogy jobban el lehet klnteni az

    alkalmazs megjelentsi rtegt a kd tbbi rsztl. A UI lersok az alkalmazs kdjn kvl,

    egy kln fjlban vannak, ami azt jelenti, hogy anlkl lehet megvltoztatni, hogy a forrskdot

    mdostani, s emiatt jrafordtani kellene. Pldul, megadhatunk az egyes kperny

    helyzetekhez, mretekhez vagy nyelvekhez kln-kln XML elrendezst. Ezen fell az XML-

    ben deklarlt elrendezseknek az is az elnye, hogy knnyebben tudjuk olvasni a UI struktrjt,

  • 5/22/2018 Android Prog

    36/67

    36

    gy knnyebben tudjuk az esetleges hibkat is javtani. Ebbl kifolylag most az XML-ben

    trtnfelhasznli fellet elrendezs deklarlsra helyezzk a hangslyt.

    ltalnossgban elmondhat, hogy a UI deklarlshoz hasznlt XML nyelvezet szorosan kveti

    az osztlyok s metdusok elnevezseit, ahol az elemek nevei az osztlyok neveinek, mg az

    attribtumok nevei a metdusok neveinek felelnek meg. Ez a megfelels sokszor annyira direkt,

    hogy sokszor egyrtelmen meg tudjuk mondani, hogy melyik XML attribtum melyik

    osztlymetdusnak, vagy pp melyik XML elem melyik osztlynak felel meg. Ugyanakkor

    figyeljnk r, hogy a nyelvezetben nem minden esetben azonos a kt nv. Bizonyos esetekben

    elfordulnak kisebb eltrsek. Pldul az EditText elemnek van egy text attribtuma, amely azEditText.setText()metdusnak felel meg.

    UI lers XML-ben

    Az Android XML nyelvezetvel gyorsan megtervezhetjk a klnfle UI elrendezseket s

    tartalmazott kperny elemeket, hasonl mdon a HTML-ben val weboldal tervezshez

    begyazott elemek sorozatval.

    Minden layout fjlnak pontosan egy gykrelemet kell tartalmaznia, ami vagy egy Viewvagy

    egy ViewGroupobjektum kell, hogy legyen. Miutn definiltuk a gykrelemet, tovbbi layout

    objektumokat vagy widgeteket adhatunk hozz gyermek elemknt, gy ptve fel a View

    hierarchit amely meghatrozza az elrendezsnket. Az albbi pldban egy olyan XML

    elrendezs ltszik, amely a LinearLayoutelrendezst hasznlja fel egy TextViews egy Button

    tartalmazsra:

  • 5/22/2018 Android Prog

    37/67

    37

    Miutn megadtuk az elrendezsnket XML-ben, mentsk el a .xml kiterjeszts fjt az Android

    projekt res/layout/ knyvtban.

    2.5. Alkalmazs erforrsokLehetleg minden esetben szervezznk ki minden erforrst pldul kpek, stringek - az

    alkalmazsunk kdjbl kln helyre, hogy fggetlenl kezelhessk ket a kd tbbi rsztl. Az

    erforrsok kiszervezsvel arra is lehetsg nylik, hogy alternatvkat biztostsunk az

    alkalmazsunknak a klnfle eszkzkonfigurcikhoz, pldul ms nyelvek vagy

    kpernymretek figyelembe vtelvel. Ez egyre fontosabb dolog, mivel egyre tbbfle Android

    eszkz jelenik meg a piacon. Ahhoz, hogy klnfle konfigurcikkal is kompatibilis legyen az

    alkalmazsunk, rendszereznnk kell az erforrsokat a projekt res/ knyvtrban alknyvtrak

    segtsgvel, amelyek tpusonknt vagy konfigurcinknt csoportostanak.

    Minden erforrshoz megadhatunk egy alaprtelmezett s tbb alternatv erforrst az

    alkalmazsban:

    Az alaprtelmezett erforrsokat eszkzkonfigurcitl fggetlenl fogja hasznlni azalkalmazs, vagy ha nincs az adott konfigurcihoz megadott megfelelalternatva.

  • 5/22/2018 Android Prog

    38/67

    38

    Az alternatv erforrsokat adott konkrt konfigurcihoz tervezzk. Az erforrs csoportottartalmaz knyvtr nevt kiegsztve egy konfigurcis jelzvel megadjuk, hogy milyenkonfigurci esetn hasznlja fel az alkalmazsunk a knyvtrban lv alternatv

    erforrsokat. Pldul, mg az alaprtelmezett UI elrendezst a res/layout/knyvtrban

    troljuk, egy msik UI elrendezst is megadhatunk arra az esetre, ha a kpernyt elforgatjk

    vzszintes skra (landscape orientation), amit a res/layout-land/knyvtrban fogunk

    elmenteni. Az Android automatikusan a megfelel erforrsokat fogja felhasznlni gy,

    hogy megprblja illeszteni az erforrs knyvtrak neveit az eszkz aktulis

    konfigurcijhoz.

    1. bra.Kt eszkz az alaprtelmezetterforrsokat hasznlja.

    2. bra. Kt eszkz, az egyik alternatverforrsokat hasznl.

    Az 1. bra azt mutatja, hogyan lehet alaprtelmezett erforrsok egy gyjtemnyt klnbz

    eszkzkn felhasznlni, ha nincs elrhet alternatva. A 2. bra pedig azt pldzza, hogy

    ugyanaz az alkalmazs hogyan kpes alternatv erforrsok segtsgvel klnbz

    konfigurcikon is helyesen megjelenni.

    2.5.1.

    Er

    forrs tipusokEbben a fejezetben rviden felsorolunk nhny erforrs tpust, amiket az alkalmazsunkhoz

    felhasznlhatunk.

    Animci erforrsok: Elre meghatrozott animcikat definilnak.A tween tpus animcikat a res/anim/knyvtrban troljuk, s az R.animosztlyon

  • 5/22/2018 Android Prog

    39/67

    39

    keresztl rjk el. A frame tpus animcikat a res/drawable/knyvtrban troljuk s

    az R.drawableosztlyon keresztl rjk el. Sznkezelerforrsok: Sznkezelerforrsokat definilnak, amelyek az aktulis View

    llapot alapjn vltoznak. A res/color/knyvtrban troljuk s az R.colorosztlyon keresztl

    rjk el.

    Kirajzolhat erforrsok: KlnbzXML vagy bitmap alap grafikkat definilnak.A res/drawable/knyvtrban troljuk s az R.drawableosztlyon keresztl rjk el.

    Elrendezs erforrsok: Az alkalmazs felhasznli felletnek elrendezst definiljk. Ares/layout/knyvtrban troljuk s az R.layoutosztlyon keresztl rjk el.

    Men erforrsok: Az alkalmazs menk tartalmt definiljk.A res/menu/knyvtrban troljuk s az R.menuosztlyon keresztl rjk el.

    String erforrsok: Stringeket, String tmbket definilnak (formzssal s stlusokkalegytt). A res/values/knyvtrban troljuk s az R.string, R.array, s R.pluralsosztlyokon

    keresztl rjk el.

    Stlus erforrsok: A UI elemek kinzett s formtumt definiljk.A res/values/knyvtrban troljuk s az R.styleosztlyon keresztl rjk el.

    Tovbbi erforrsok:

    Klnbz rtkeket (pl. boolean, integer, dimenzi, szn, tmb) definilnak.

    A res/values/knyvtrban troljuk, de egyedi Ralosztlyokon keresztl rjk el ket

    (pl. R.bool, R.integer, R.dimen, stb.).

    2.6. AdattrolsAz Android klnbz lehetsgeket knl az alkalmazs perzisztens adatainak eltrolsra. Amegfelelmegoldst az adott ignyek alapjn vlasztjuk ki, mint pl. az adatot csak az alkalmazs

    rhesse el, vagy ms alkalmazsok (vagy a felhasznl) is, mennyi helyre van szksge az

    adatoknak, stb.

    Az albbi adattrolsi lehetsgeink vannak:

  • 5/22/2018 Android Prog

    40/67

    40

    Megosztott preferencik (SharedPreferences): Privt primitv adatok trolsa kulcs-rtkprokkal.

    Belstr: Privt adatok trolsa eszkz belstrjban. Klstr: Publikus adatok trolsa a megosztott klstrban. SQLite adatbzisok: Strukturlt adatok trolsa privt adatbzisban. Hlzati kapcsolat: Adatok trolsa a weben sajt hlzati szerverrel.

    Az Android lehetsget knl arra is, hogy a privt adatainkat is megosszuk ms alkalmazsokkal

    tartalomszolgltatk segtsgvel. A tartalomszolgltat egy opcionlis komponens, amely

    rs/olvass jogokat knl az alkalmazsunk adataira, az ltalunk belltott megktsekfigyelembevtelvel. Rszletekrt lsd a 2.2.4. Tartalomszolgltatk cmfejezetet.

    Megosztott preferencik hasznlata

    A SharedPreferences osztly egy ltalnos keretrendszert knl, amelynek segtsgvel

    elmenthetnk s visszaolvashatunk primitv adattpus kulcs-rtk prokat. A

    SharedPreferencessegtsgvel brmilyen primitv adatot elmenthetnk: boolean, float, int, long,

    s string. Ezek az adatok megmaradnak kt indts kztt.

    A SharedPreferences objektum megfogshoz az albbi kt mdszer egyikt kell hasznlnunk:

    getSharedPreferences() Ezt hasznljuk akkor, ha tbb preferencia, nvvel azonostottpreferenciafjlra van szksgnk. A nevet az elsparamterben adjuk t a metdusnak.

    getPreferences() Ezt hasznljuk akkor, ha a Tevkenysgnknek egy preferencia fjlra vanszksge. Mivel ez lesz az egyetlen preferencia fjl a Tevkenysgnek, nem adunk meg nevet.

  • 5/22/2018 Android Prog

    41/67

    41

    Pldul:

    // Restore preferencesSharedPreferencessettings =getSharedPreferences(PREFS_NAME,0);booleansilent =settings.getBoolean("silentMode",false);setSilent(silent);

    // Save preferencesSharedPreferencessettings =getSharedPreferences(PREFS_NAME,0);SharedPreferences.Editoreditor =settings.edit();editor.putBoolean("silentMode",mSilentMode);

    // Commit the edits!editor.commit();

    Belstr hasznlata

    Fjlokat kzvetlenl az eszkz bels trjba is menthetnk. Alaprtelmezsknt a bels trba

    mentett fjlok kizrlagosak az alkalmazs szmra, s ms alkalmazsok nem rhetik el (s a

    felhasznl sem). Amikor a felhasznl eltvolttja az alkalmazst az eszkzrl, ezek a fjlok

    trldnek.

    Fjl ltrehozsa s rsa a belstrban:

    1.Hvjuk meg az openFileOutput() metdust a fjl nevvel s mveleti mddal. Ez visszaadneknk egy FileOutputStreamobjektumot.

    2.A fjlba rni a write() metdussal tudunk.3.Az adatfolyam lezrshoz a close() metdust hasznljuk.

    Pldul:

    StringFILENAME ="hello_file";Stringstring="hello world!";

    FileOutputStreamfos =openFileOutput(FILENAME,Context.MODE_PRIVATE);fos.write(string.getBytes());fos.close();

  • 5/22/2018 Android Prog

    42/67

    42

    A MODE_PRIVATEmveleti md gy hozza ltre a fjlt (vagy rja fell, ha mr ltezik ilyen

    nev fjl), hogy kizrlag az alkalmazsunk fogja tudni elrni. Tovbbi mveletimdok: MODE_APPEND,MODE_WORLD_READABLE, s MODE_WORLD_WRITEABLE.

    Klstr hasznlata

    Minden Android-kompatibilis eszkz tmogat egy megosztott klstrt, amit fjlok trolsra

    hasznlhatunk. Ez lehet akr egy hordozhat troleszkz (mint pldul SD krtya) vagy egy

    bels(nem hordozhat) tr is. A klstrra mentett fjlok minden alkalmazs szmra elrhetek

    s a felhasznli is mdosthatja

    ket, ha USB trknt felcsatolja a szmtgpre az Androidoseszkzt.

    Fjlok elrse klstron

    Ha Level 8 vagy magasabb szint API-t hasznlunk, akkor a getExternalFilesDir() metdussal

    nyithatunk meg File objektumot, amely a kls tr mappt kpviseli, ahova menthetjk a

    fjljainkat. Ez a metdus egy type paramtert fogad, ami meghatrozza a kvnt alknyvtr

    tpust, mint pldul a DIRECTORY_MUSICvagy DIRECTORY_RINGTONES(ha

    nullparamtert adunk t, az alkalmazs gykrknyvtrt rjk el). Ez a metdus ltre is hozza akvnt knyvtrat, amennyiben szksges. A knyvtr tpusnak megadsval biztostjuk, hogy

    az Android mdia scannere megfelelen kategorizlja be a rendszerben tallhat fjlokat (pldul

    a csenghangokat csenghangknt fogja azonostani s nem zeneknt). Ha a felhasznl eltvolt

    egy alkalmazst, a hozz tartoz knyvtr s tartalma szintn trldik.

    Ha Level 7 vagy alacsonyabb szint API-t hasznlunk, akkor a getExternalStorageDirectory()

    metdussal nyithatunk meg Fileobjektumot, amely a kls tr gykert fogja kpviselni. Ezek

    utn az albbi knyvtrba rjuk ki az adatokat:

    /Android/data//files/

  • 5/22/2018 Android Prog

    43/67

    43

    Adatbzisok hasznlata

    Az Android teljeskr tmogatst nyjt az SQLite adatbzisokhoz. A ltrehozott adatbzisokatnv alapjn brmely osztly el tudja rni az alkalmazson bell, de nem elrhetek alkalmazson

    kvl.

    SQLite adatbzis ltrehozsnak az ajnlott mdja az SQLiteOpenHelperosztly alosztlynak

    implementlsval trtnik, amin bell felldefiniljuk az onCreate() metdust, amiben

    futtathatjuk a tblkat ltrehoz SQLite parancsokat. Pldul:

    publicclassDictionaryOpenHelperextendsSQLiteOpenHelper{privatestaticfinalintDATABASE_VERSION =2;privatestaticfinalStringDICTIONARY_TABLE_NAME ="dictionary";privatestaticfinalStringDICTIONARY_TABLE_CREATE =

    "CREATE TABLE "+DICTIONARY_TABLE_NAME +" ("+KEY_WORD +" TEXT, "+KEY_DEFINITION +" TEXT);";

    DictionaryOpenHelper(Contextcontext){super(context,DATABASE_NAME,null,DATABASE_VERSION);

    }

    @OverridepublicvoidonCreate(SQLiteDatabasedb){

    db.execSQL(DICTIONARY_TABLE_CREATE);}

    }

    Az ltalunk definilt konstruktorral ltrehozhatunk egy SQLiteOpenHelper implementci

    pldnyt. Az adatbzisban val rshoz/olvasshoz hasznljuk agetWritableDatabase() s getReadableDatabase() metdusokat. Mindkett egy SQLiteDatabase

    objektumot ad vissza, ami az adatbzist kpviseli s SQLite mveletekhez biztost metdusokat.

    SQLite lekrdezseket az SQLiteDatabase query()metdusokkal futtathatunk, amelyek

    klnbz lekrdezs paramtereket fogadnak. Ilyenek pldul a lekrdezend tbla neve,

    projekci, szelekci, oszlopok, csoportosts, stb. sszetett lekrdezsek esetn, amelyek oszlop

  • 5/22/2018 Android Prog

    44/67

    44

    aliasokat ignyelnek, az SQLiteQueryBuilder osztlyt rdemes hasznlnunk, ami jpr

    knyelmes metdust knl lekrdezsek felptshez.

    Minden SQLite lekrdezs egy Cursor objektummal tr vissza, amely a lekrdezs

    eredmnyeknt elllt sorokra mutat. Minden esetben a Cursor objektummal lesznk kpesek

    naviglni az adatbzis lekrdezs eredmnysorai kztt s rhatjuk/olvashatjuk a sorokat s

    oszlopkat.

    Hlzati kapcsolat hasznlata

    A hlzatot is felhasznlhatjuk (amennyiben elrhet) adatok trolsra s visszaolvassra a

    sajt web-alap szolgltatsainkon. Hlzati mveletekhez az albbi kt csomag osztlyait kell

    hasznlnunk:

    java.net.* android.net.*

  • 5/22/2018 Android Prog

    45/67

    45

    3. Egy alkalmazs Android Platformon: Voice+A Google 2007-ben szerezte meg a GrandCentral telekommunikcis cget, melyet tkereszteltGoogle Voice-ra. Sok ember soha nem hasznlta ezt a szolgltatst, mert miutn a Google

    tulajdonba kerlt a cg befagyasztotta a hasznlatt 21 hnapra.

    2009 mrciusban hozzadott j funkcikkal a Google Voice szolgltats jra elindult:

    minden Google felhasznl kaphat egy virtulis telefonszmot mellyel felhvhat brmilyenmobil s vezetkes telefonszm.

    szveges zenetek kezelse

    hangposta szolgltats alacsony kltsgkonferencia s nemzetkzi hvsok

    A Google Voice szolgltats be lett integrlva a Google levelezrendszerbe is, amivel a

    felhasznlk a kontaktlistbl felhvhatnak IP alap hanghvssal egy msik felhasznlt, vagy az

    egyenleg feltltse utn akr alacsony kltsg nemzetkzi mobil vagy vezetkes telefonhvst

    indthatnak.

    A clom egy olyan Google Voice kliens fejlesztse volt Android platformra, amivel a

    felhasznlk az egsz vilgon a lehet legegyszerbb mdon kpesek internet hvst

    kezdemnyezni.

    Tovbb clom volt egy olyan alkalmazs kivlasztsa, ami az Android rendszernek olyan alap

    rszeit mutatja be, ami ms szmra is hasznos informcival szolglhat: BroadcastReceiver,

    Activity, sajt ksztsmegjelentelem, HTTP hasznlata, RegExp kifejezsek.

  • 5/22/2018 Android Prog

    46/67

    3.1. Voice+ architekt

    46

    rja

  • 5/22/2018 Android Prog

    47/67

    47

    A Voice+ alkalmazs 2 fkomponensbl ll:

    Settings menu: ahol a Google account-tal kapcsolatos belltsokat vgezhetjk el. Kimen hvs integrci: hvs megkezdsekor eldnthetjk, hogy Google Voice vagy

    norml GSM hvst szeretnnk indtani.

    A Google Voice szolgltats ignybevtelhez szksg van egy Google account-ra s egy

    aktivls a Voice szolgltatsra.

    3.2. Voice+ felhasznli felleteAzok a felletek, melyeken keresztl a felhasznl bellthatja a Google account paramtereit s

    lthatja a hvs kzbeni sttuszokat.

    3.2.1. Voice+ funkcii Belltsok megtekintse Google account kezelse Visszahvs telefonszmainak megjelentse Telefonszm lista megjelentse hvs indtsakor Hivs sttusz

    3.2.1.1. Belltsok megtekintseAz alkalmazs elindtsakor ezzel a kpernyvel tallkozunk. Itt be-/kikapcsolhatjuk a kimen

    hvs integrcit az Android rendszerbe, belphetnk a Google account s telefonszmok

    menjbe.

    3.2.1.2. Google account kezelseGoogle account megadsa utn automatikusan tnavigl a visszahvs telefonszmainak a

    belltsaira.

  • 5/22/2018 Android Prog

    48/67

    48

    3.2.1.3. Visszahvs telefonszmainak megjelentseItt adhatjuk meg azokat a visszahvs telefonszmokat, amelyek megjelennek hvs indtskor.

    3.2.1.4. Telefonszm lista megjelentse hvs indtsakorA hvs indtsakor megjelenik elszr egy felugr men, melyben fel vannak sorolva milyen

    hvst lehet kezdemnyezni. A lista elejn vannak az ltalunk belltott visszahvs

    telefonszmok, alatta a norml GSM hvs lehetsgei.

    3.2.1.5. Hvs sttuszA hvs megkezdsekor megjelenik egy sttuszablak s egy hvst befejezgomb arra az esetre,

    ha a visszahvs nem kvetkezik be.

  • 5/22/2018 Android Prog

    49/67

    49

    3.3. Megvalsts3.3.1. BelltsokAz alkalmazs elindtsakor a bellts menvel tallkozunk.

    A bellts men egy ListActivity-bl szrmaztatott Activity-vel van megvalstva. A lista

    elemeit dinamikusan tltjk fel, gy eltrhetnk az alaprtelmezett megjelentstl s sajt

    kinzetet definilhatunk.

    publicclassSettings extendsListActivity {GVCallerSettingsListAdapter adapter;

    @OverridepublicvoidonCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);adapter= new GVCallerSettingsListAdapter(this);setListAdapter(adapter);

    }

  • 5/22/2018 Android Prog

    50/67

    50

    @OverrideprotectedvoidonListItemClick(ListView l, View v, intposition, longid) {

    adapter.click(this, position);}

    @OverrideprotectedvoidonActivityResult(intrequestCode, intresultCode, Intent data) {

    adapter.notifyDataSetChanged();super.onActivityResult(requestCode, resultCode, data);

    }}

    Mivel a lista sorainak tartalma egyedi, a lista adaptere egy BaseAdapter-bl szrmaztatott sajtGVCallerSettingsListAdapter adapterosztly. Ezeknek az egyedi soroknak a kinzete xml-ben

    van lerva a layout-ok kztt. Az adapterbe a getView() fggvny megvalstsval tltjk be a

    lista sorainak kinzett. A click()esemny figyelve tudunk reaglni a kivlasztott listaelemre.

    3.3.1.1.Kimenhvs integrciAz elslistaelem a kimenhvs integracijnak kapcsolja, ez nem csinl mst, mint lementi az

    llapotot a SharedPreferences-be amikor megvltozik.

    @OverridepublicvoidonCheckedChanged(CompoundButton buttonView, booleanisChecked) {

    SharedPreferences settings = context.getSharedPreferences(Constants.PREFERENCE_NAME,MODE_PRIVATE);

    SharedPreferences.Editor editor = settings.edit();editor.putBoolean(Constants.IS_OUTGOING_CALL_INTEGRATION, isChecked);editor.commit();

    }

    Majd ha kimenhvs trtnik, akkor ugyaninnen fogjuk beolvasni ezt a belltst.

  • 5/22/2018 Android Prog

    51/67

    51

    3.3.1.2.Google accountMegadjuk a bejeletkezshez szksges felhasznlnevet s jelszt:

    3.3.1.3.Visszahvs szmaiA harmadik listaelemen bell a visszahvshoz val telefonszmokat rendezgethetjk. A szmok

    a Google fikbl tltdnek le. Ezeket a szmokat Voice web-es felletn kellett megadnunk,

    nevk forwarding numberss 2 fle funkcit tltenek be:

    Egyik funkcija a hvstirnyts: Akkor, ha nem vagyunk elrhetek a Voiceszolgltatson keresztl, akkor hova tovbbtsa a rendszer a hvst.

    Msik funkcija a visszahvs: Mi ezt a funkcit hasznljuk most ki. Amikor telefonlunkakkor elszr a Google GrandCentral felhv minket s miutn felvettk trcszza azonnal a

    hvottat.

  • 5/22/2018 Android Prog

    52/67

    52

    Ez is egy egyedi lista, radsul ennek a sorait mg cserlgetni is lehet. A jobb szlen lvicon

    megrintse utn fel/lehzhat az elem. Szintn a BaseAdapterkiterjesztsvel ksztettem el ezta listt.

    publicclassSortableListViewAdapter extendsBaseAdapter {private ArrayList listItems;privateLayoutInflater layoutInflater;privatefloatscale;

    publicSortableListViewAdapter(Context context, ArrayList listItems) {layoutInflater= LayoutInflater.from(context);this.listItems= listItems;

    scale= context.getResources().getDisplayMetrics().density;}

    @OverridepublicintgetCount() {

    returnlistItems.size();}

    @OverridepublicObject getItem(intposition) {

  • 5/22/2018 Android Prog

    53/67

    53

    returnlistItems.get(position);}

    @OverridepubliclonggetItemId(intposition) {

    returnlistItems.get(position).getId();}

    @OverridepublicView getView(intposition, View convertView, ViewGroup parent) {

    if(convertView == null) {convertView = layoutInflater.inflate(R.layout.sortablelistviewitem_template, null);

    }

    LinearLayout template = (LinearLayout) convertView;SortableListItem listItem = listItems.get(position);

    if(listItem.isHeader()){

    View view = template.findViewById(R.id.separator);if(view == null) {

    view = layoutInflater.inflate(R.layout.sortablelistviewitem_separator, null);template.removeAllViews();template.addView(view, newLayoutParams(LayoutParams.FILL_PARENT,

    LayoutParams.WRAP_CONTENT));}

    TextView text = (TextView) view.findViewById(R.id.item_title);text.setText(listItem.getTexts()[0]);

    template.setMinimumHeight(0);}elseif(listItem.isEmpty()){

    template.removeAllViews();template.setMinimumHeight((int)(58 * scale));

    }else{

    View view = template.findViewById(R.id.settings);

    if(view == null) {view = layoutInflater.inflate(R.layout.sortablelistviewitem_template_row, null);template.removeAllViews();

  • 5/22/2018 Android Prog

    54/67

    54

    template.addView(view, newLayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));

    }

    String[] texts = listItem.getTexts();

    TextView text = (TextView) view.findViewById(R.id.item_title);text.setText(texts[0]);

    text = (TextView) view.findViewById(R.id.item_subtitle);text.setText(texts[1]);

    template.setMinimumHeight(0);}template.requestLayout();

    returnconvertView;}

    publicvoidsetItem(intposition, SortableListItem listItem) {listItems.set(position, listItem);

    }}

    A SortableListViewAdapter konstruktorban adhat t a SortableListItemlista mely megjelenik a

    lista elemeiknt. Ebben van lerva, hogy egy elem fejlc-e vagy telefonszm s milyen szveget

    kell megjelenteni az adott listaelemben. Csak olyan listaelem helyezhett, ami nem fejlc.

    3.3.2. Hvs indtsaA telefonlst a telefon brmelyik programjbl kezdemnyezhetjk (telefonknyv, trcsz,

    egyb teleptett programbl), mivel az AndroidManifest.xml-ben meg van hatrozva intent-filter-

    rel, hogy minden kimenhvsra fusson be az alkalmazsunkba. Mgpedig a Callerosztly van

    megadva, mint receiver.

  • 5/22/2018 Android Prog

    55/67

    55

    Teht, a Caller osztly kiterjeszti a BroadcastReceiver abstract osztlyt s az onReceive()

    fggvny megvalstsval tudjuk elkapni az sszes kimenhvs kezdemnyezst.

    publicclassCaller extendsBroadcastReceiver {staticString lastNumber;staticlonglastTime;

    publicstaticbooleanisSkipNext= false;

    @OverridepublicvoidonReceive(Context context, Intent intent) {

    String intentAction = intent.getAction();

    SharedPreferences settings =context.getSharedPreferences(Constants. PREFERENCE_NAME,android.content.Context.MODE_PRIVATE);

    if (settings.getBoolean(Constants.IS_OUTGOING_CALL_INTEGRATION, false)) {if (intentAction.equals(Intent.ACTION_NEW_OUTGOING_CALL)) {

    String number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);

    if(lastNumber!= null&& lastNumber.equals(number) && isSkipNext) {// do nothing, normal call

    } else{if(lastNumber!= null&& lastNumber.equals(number) &&

    (SystemClock.elapsedRealtime() - lastTime) < 3000) {// deny callsetResultData(null);

    } else{lastTime= SystemClock.elapsedRealtime();

    lastNumber= number;

    setResultData(null);

    Intent ctsIntent = newIntent(context, CallTypeSelector.class);ctsIntent.setFlags(Intent. FLAG_ACTIVITY_NEW_TASK);ctsIntent.putExtra(Intent.EXTRA_PHONE_NUMBER, number);context.startActivity(ctsIntent);

  • 5/22/2018 Android Prog

    56/67

    56

    }

    }

    isSkipNext= false;}

    }}

    }

    Az onReceive() fggvnyben dl el, hogy mit tegynk, ha kimen hvs trtnik. Ha be van

    kapcsolva a kimen

    hvs integrci, akkor a hvsi folyamat egy msik tevkenysgenfolytatdik, ahol a felhasznl eldntheti milyen tipus (Voice+ vagy GSM) hvst akar

    kezdemnyezni. Az onReceive() fggvnyben van egy 3 msodperces jrahvs elleni vdelem

    ugyanis hvs indtsakor, ha gyorsan tbbszr nyomjuk meg a hvs gombot, akkor az

    onReceive()fggvny is tbbszr fut le egyms utn.

    Egy hvsi folyamat kpei:

  • 5/22/2018 Android Prog

    57/67

    A hvs indtsakor egy povisszahvsi szmokat lth

    Home: telefon, mint Google Talk: Google Gizmo5: virtulis U

    account, ennek haszn

    Phone: norml telefokimen

    hvs integr Phone & disable V

    Voice+ kimen hv

    nem fog Google Voic

    57

    pup dialogus ablak ugrik fel, a msodik kptjuk s mg plusz 2 opcit a norml GSM h

    szkz fog felhvdni, USA SIM krtyval k

    Talk kliensen trtnik a visszahvs.

    A-beli telefonszmon trtnik a visszahv

    latval knyelmesen internet telefonlhatun

    nhvst kezdemnyez s vltozatlanul (beka

    i.ice+: szintn norml telefonhvst kezde

    integrcit. Ezt akkor vlasztja a felhaszn

    e szolgltatson keresztl telefonlni.

    n lthat is. Az elmentettvsra:

    ll rendelkeznie.

    . Ehhez tartozik egy SIP

    .

    pcsolva) marad a Voice+

    nyez, de kikapcsolja a

    l, ha huzamosabb ideig

  • 5/22/2018 Android Prog

    58/67

    58

    3.3.2.1.GoogleVoice osztlyMagyarorszgon csak a Google Talk vagy virtulis USA telefonszmon tudjuk ignybe venni avisszahvsos Google Voice szolgltatst. Google Talk szolgltats minden Google account-hoz

    tartozik. Egy ltalam hasznlt virtulis telefonszm szolgltat, a Gizmo5 is a Google-nek egy

    ingyenes szolgltatsa, de nem jr automatikusan. A Gizmo5 a telefonszmon kvl mg SIP

    (Session Initiation Protocol) hozzfrst biztost minden regisztrlnak. A Google Voice HTTP

    szolgltatsra alapozva ksztettem el a sajt GoogleVoice osztlyomat, mellyel knnyedn

    menedzselhetaz account s hvskezels.

    Az albbi HTTP API-ra alapozva ksztettem el a GoogleVoice osztlyt:

    Bejeletkezs: https://www.google.com/accounts/ClientLogin Alap URL: https://www.google.com/voice/m Hvs: https://www.google.com/voice/m/sendcall Hvs trlse: https://www.google.com/voice/m/callsms Tel.szm lista: https://www.google.com/voice/m/selectphone

    Ehhez az API-hoz szksgesek a HTTP header-ek s paramterek az informcicserebiztostshoz. Az albbi elengedhetelen header-ek szksgesek:

    Authorization: bejelentkezs utn ezzel tudjuk megadni azAuthentication Token-t a tovbbikommunikcihoz.

    User-agent: itt a kvetkezfix paramtert adom meg: Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.A.B.C Safari/525.13

    Az, hogy milyen paramtereket adunk mg meg az URL-ben, az API fgg

    .

    3.3.2.2.BejelentkezsA GoogleVoice osztly konstruktorval lehet bejelentkezni, a Google felhasznlnv s jelsz

    szksges a pldnyostshoz. A sikeres bejelentkezs eredmnye egy Authentication Tokenamit

    letrolunk. Ltrehoztam egy msik konstruktort is, aminek csak ez az Authentication Token a

    paramtere, ugyanis egy ilyen token lettartama akr 2 ht is lehet, gy nem kell felesleges idt

  • 5/22/2018 Android Prog

    59/67

    59

    tlteni azzal, hogy mindig bejelentkeznk minden pldnyostskor. Ez jelentsen felgyorstja a

    hvsi folyamatot, a hv gomb elengedse utn szinte azonnal kapjuk a visszahvst.

    A bejelentkezshez szksges HTTP header:

    User-AgentA bejelentkezshez szksges HTTP paramterek:

    Email: Passwd: Service: grandcentral Source: VoicePlus

    A HTTP vlaszban pedig megkapjuk azAuthentication Token-t, amivel a tovbbi APIszolgltatsokat ignybe vehetjk.

    3.3.2.3.Visszahvs telefonszmainak lekrseSzksges HTTP header-ek:

    Authorization User-Agent

    HTTP paramterek nincsenek ehhez a szolgltatshoz, itt egy teljes telefonszm listt kapunk.

    A HTTP vlasz egyszerbb darabolsa kedvrt ksztettem egy RegExp kifejezst, ami

    kivlogatja a szveg kzl a Forwarding Numbernevt, tipust s szmt. A teljes visszahvs

    lista lekrse az albbi fggvnnyel trtnik:

    publicForwardingNumber[] phones() {ForwardingNumber[] fnRes = null;

    try{String phonesString = getRequest(phonesURLString);List fn = newArrayList();Pattern p = Pattern.compile("(name=\"phone\"

  • 5/22/2018 Android Prog

    60/67

    60

    value=\")(.*?)(\\|)(.*?)(\")(.*?)(\\s*)(.*?)(:)");

    Matcher m = p.matcher(phonesString);while(m.find()) {fn.add(newForwardingNumber(Integer.parseInt(m.group(4)), m.group(8),

    m.group(2)));}

    fnRes = fn.toArray(newForwardingNumber[0]);forwardingNumbers= fnRes;

    } catch(IOException e) {}

    returnfnRes;}

    3.3.2.4.HvskezelsA calls cancelCall API szolgltatssal kezdemnyezhetnk hvst, vagy annak visszavonst.

    A hvs indtshoz s visszavonshoz szksges HTTP header-ek:

    Authorization User-Agent

    A hvs indtshoz szksges HTTP paramterek:

    Phone: Number:

    A hvs visszavonshoz szksges HTTP paramterek:

    Cancel: cancel

  • 5/22/2018 Android Prog

    61/67

    61

    3.4. TesztelsA fejleszts vgs fzisa a tesztels, ekkor az elkszlt programot futs kzben alaposanteszteljk. A program mobiltelefonon s emultoron is tesztelsre kerlt. Emultornak az elnyei,

    hogy az Android sszes megjelent verziin tesztelhet az alkalmazsunk. A mr kifutott

    szriktl kezdve a legjabb cscskategris kszlkeken fut Android verzikon is tudunk

    tesztelni. St mg a kiadsra vr Android verzikon is folyhat a tesztels, amelyek mg valdi

    eszkzn meg sem jelentek a piacon. Az emultor nem ad valsidejfutsi idt, de a viselkedse

    kisebb megszortsokkal szinte megegyezik egy igazi eszkzzel, fejleszts kzben igen nagy

    segtsg. Az emultor el

    nye tovbb, hogy amikor teljesen ellr

    l kezdjk a tesztelst,nyugodtan nyomhatunk gyri bellts visszalltst a teljes felhasznli adat trlshez, egy

    valdi eszkzn nem szvesen hajtannk vgre ugyanezt mivel akkor a teljes szemlyes adataink

    is trldnek a kszlkrl. Viszont ha emultoron tkletesen fut az alkalmazsunk, valdi

    eszkzkn is teszteljk s lehetleg a legtbb fajtn. Egyre tbb mindenkinek van Android

    platformmal elltott kszlke, csaldtagok, kollgk, bartok s ismersk krben akad

    manapsg nhny kszlk, amin tudunk egy-egy vgstesztet futtatni.

  • 5/22/2018 Android Prog

    62/67

    62

    3.5. A Voice+ publiklsa az Android MarketbeMieltt publikljuk az alkalmazst a marketbe, eltte az albbi teendnket kell elvgezni:

    Kszteni kell egy fejleszti profilt az Android Market-en, azaz meg kell adni a fejlesztnevt, email cmt, a fejleszt honlapjnak cmt s telefonszmt. Ezeket a

    kontaktinformcikat fogja ltni a vsrl/letlt.

    25 USD regisztrcis djat kell fizetni a fejleszti profil ltrehozshoz. Ezzel aregisztrcis djjal jogosult a fejlesztbrmennyi program feltltsre a marketbe.

    Ha ksz a fejleszti profil, megkezdhetjk a feltltst. Meg kell adnunk azokat az az

    llomnyokat, amiket fel szeretnnk tlteni:

    A futtathat llomnyt: VoicePlus.apk. 2 vagy tbb screenshot-ot a programrl melyeknek a felbontsai a kvetkezk lehetnek:

    320x480, 480x800, vagy 480x854 pixel mret 24 bites PNG vagy JPEG. Az, hogy

    fggleges vagy vzszintes a tjolsa a kpnek az mindegy.

    Nagyfelbonts programikon, aminek a mrete 512x512 pixel mret32 bites PNG vagyJPEG.

    Egy promcis ikont, aminek a mrete 180x120 pixel mret24 bites PNG vagy JPEG. Egy msik nagyfelbonts kp mely a program sajtossgait tartamazza, aminek a mrete

    1024x500 pixel mret24 bites PNG vagy JPEG. Ilyen mretkpekbl kerl ki nhny a

    Market foldalra.

    Nmi lerst is meg kell adni a programhoz, alapbl az angol nyelv program megnevezst s

    lerst ajnlja fel. A program nevhez bertam a Voice+megnevezst s a kvetkez

    lerst adtammeg a programhoz:

    The Voice+ catches all outgoing calls and uses Google Voice service to connect you with thedialed number by calling you back on your selected callback number first, then calling thenumber you dialed. When you make an outgoing call you can select a callback number from thedisplayed callback list that the Voice+ will use to connect you with the call you initiated. TheVoice+ will connect you with the called partner after both Voice+ initiated calls aresuccessfully established.

  • 5/22/2018 Android Prog

    63/67

    63

    The callback can be redirected to all popular SIP clients (Sipdroid, Fring, ...) on your device tomake calls over the internet or you can combine a virtual phone number + SIP (like Gizmo5) tomake free calls.To configure/modify callback numbers you need to login to your Google Voice account in abrowser.This application uses minimal memory and resources, no voicemail/SMS/alert/notificationsupport.

    Mg nhny adatot kell megadnunk arra vonatkozlag, hogy milyen korosztlynak kerl

    kipubliklsra a programunk, mely terleten tlthetik le a programunkat, s kontaktinformcit

    mdosthatjuk, ha nem ugyanazt szeretnnk megjelenteni, mint amit a fejleszti profilban

    megadtunk.

    Ezutn nincs ms dolgunk, mint megnyomni a Publishgombot s azonnal kikerl az alkalmazs

    az Android Market-be, ettl kezdve brki szmra elrhet a http://market.android.com

    webcmen vagy egy Androidos kszlken kzvetlenl:

  • 5/22/2018 Android Prog

    64/67

    64

  • 5/22/2018 Android Prog

    65/67

    65

    4. sszefoglalsA szakdolgozatom elksztsvel sikerlt betekintst nyerni az Android platformra val fejlesztslpseibe. Els lpsben az Android platform kerlt ismertetsre, mely a bemutatott alkalmazs

    implementlsa mellett szmos j lehetsgeket rejt. Mra mr kiforrott mind a platform s mind

    a fejleszti krnyezet, mellyel nagyon knnyen fejleszthetnk alkalmazsokat.

    Tovbb ismertettem a Voice+ alkalmazs megvalstsnak lpseit. Olyan alkalmazst

    valstottam meg, mellyel a Google Voice felhasznlk ezutn mobillal is brhonnan ignybe

    tudjk venni ezt a szolgltatst, interneten keresztl telefonlhatnak, ahol van 3G lefedettsg

    vagy WiFi elrhet

    sg.Mivel az Android nylt forrskd, ezltal szinte azonnal szabadon bvthet a legjabb

    technolgik felhasznlsval. Az Android platform fejldse tovbb folytatdik azltal, hogy a

    fejleszti kzssgek egytt dolgoznak az innovatv mobil alkalmazsok ltrehozsn.

  • 5/22/2018 Android Prog

    66/67

    66

    5. KsznetnyilvntsSzeretnk ksznetet mondani mindenkinek, aki kzvetlen vagy kzvetett mdon segtette adolgozat elkszlst.

    Ksznettel tartozom Btfai Norbert tmavezetmnek, hogy lehetsget biztostott munkm

    sikeres elvgzshez s dolgozatom megrshoz. Ksznm segtksz tmogatst s

    dolgozatom alapos tnzst.

    Ksznm a kls konzulensemnek Szab kosnak a hasznos tancsait s a Micont Kft

    eszkzeit a dolgozatom elksztshez.

    Vgl szeretnm megksznni a csaldom trelmt s segtsgt.

  • 5/22/2018 Android Prog

    67/67

    67

    6. Irodalomjegyzk Open Handset Alliance

    http://www.openhandsetalliance.com

    Androidhttp://www.android.com

    Android Open Source Projecthttp://source.android.com

    Publising on Android Markethttp://market.android.com/publish

    Google Voicehttps://www.google.com/voice

    Google GrandCentralhttp://www.google.com/grandcentral

    Gizmo5http://www.google.com/gizmo5

    Gartner IT research and advisory companyhttp://www.gartner.com

    Unwiredview mobile technology bloghttp://www.unwiredview.com

    Canalys: expert analysis for the high-tech industryhttp://www.canalys.com/