Programujeme pre Android 26
Session Initiation protocol API

Nie je žiadnym prekvapením, že Android API (od verzie 9) obsahuje podporu SIP protokolu a to vo forme automatizovaných služieb, pomocou ktorých manažuje prichádzajúce a odchádzajúce hovory. SIP spojenia spravuje pomocou tried SipManager a SipSession. Tie pracujú plne autonómne bez toho aby bol programátor nútený riešiť detaily ako napr. manažment spojení (sessions), spôsob komunikácie na transportnej vrstve, spracovanie zvuku a podobne. V tejto, poslednej časti seriálu o programovaní pre Android, bližšie predstavujeme protokol SIP a to najmä z programátorského hľadiska. Následne v krátkosti popisujeme spomínané triedy Android SIP API. V prvých dvoch blokoch definujeme základné správanie sa SIP protokolu a jeho správ (požiadaviek, odpovedí) prechádzajúcich IP komunikačným kanálom. Správy sú textového formátu a pripomínajú správy protokolu HTTP. Proces vytvorenia SIP spoja súvisí so zasielaním požiadaviek, resp. príjmom odpovedí a v neposlednom rade s vymieňaním stavových informácií (kódov). V detailoch uvádzame dvojstupňový a trojstupňový proces vytvorenia komunikačného spoja. V nasledujúcom bloku informujeme o Android SIP API, ktoré natívne podporuje komunikáciu pomocou SIP protokolu, pričom má k tomu deklarovaných a definovaných niekoľko základných tried. Konštatujeme, že v princípe ide o nízkoúrovňový aj keď plne automatizovaný prístup, v rámci ktorého sme schopní implementovať zasielanie požiadaviek z vlastného zariadenia ako aj príjem požiadaviek z iného zariadenia. Naviac existuje niekoľko nadstavbových knižníc, ktoré využívajú natívne Android SIP API a prácu ešte viac zjednodušujú. Na konci článku prezentujeme nevyhnutné zmeny manifestu aplikácií a v krátkosti popisujeme význam tried SipManager, SipProfile a SipAudioCall.

obr2obr1

Programujeme pre Android 25
Komunikácia s MySQL databázou

V tejto časti seriálu sa tak trochu nostalgicky vraciame k jeho prvým častiam, v rámci ktorých sme tvorili aplikáciu plánovač a neskôr aplikáciu db_sync. Pomocou týchto vzorových aplikácií sme prezentovali vývoj jednoduchého plánovača úloh a synchronizáciu údajov uložených v internej SQLite databáze s MySQL databázou nachádzajúcou sa na webovom serveri. V článku sa k tejto téme vraciame a popisujeme ďalšie detaily týkajúce sa priamej komunikácie medzi Androidom a MySQL databázou. Konkrétne ide o spôsob akým je možné v jednoduchosti čítať údaje uložené v MySQL databáze a využiť ich na kontrolu prihlasovacích údajov. V prvom bloku sa venujeme klasickému spôsobu generácie a používania tzv. hash reťazcov. Konštatujeme, že hash je reťazec, ktorý je výstupom šifrovacieho stroja, a ktorý v nečitateľnej podobe reprezentuje pôvodný čitateľný text. Jeho význam je v tom, že sa nedá spätne previesť (dešifrovať) na pôvodný čitateľný reťazec, tzn. nikto nezistí, z akého reťazca bol vytvorený. Rovnaký hash reťazec dokážeme vypočítať v Linuxe aj v Androide. Odtiaľ je už iba krok k praktickému použitiu vypočítaného hashu – spolu s menom používateľa ho uložíme do MySQL databázy a môžeme realizovať autentifikáciu používateľov využívajúcich naše aplikácie. V druhom bloku článku uvádzame jeden z možných spôsobov autentifikácie používateľov s využitím MySQL. Popisujeme PHP skript nachádzajúci sa na strane servera, a ktorý rieši naše požiadavky. S týmto skriptom nadväzujeme komunikáciu v rámci Androidovej aplikácie pomocou abstraktnej triedy HttpURLConnection a metódy openConnection() triedy URLConnection. V ďalšom popisujeme viacstupňový proces vytvorenia spojenia a článok ukončujeme informáciami o spôsobe odovzdávania údajov na server a načítavania údajov zo servera, na ktorom sa nachádza kontaktná MySQL databáza.

obr1

Programujeme pre Android 24
Multimediálny framework

V tejto časti seriálu riešime spracovanie multimediálnych súborov/streamov pomocou API MediaPlayer (audio/video/stream player), resp. SoundPool. V prvej časti článku rozoberáme metódy triedy MediaPlayer, ktoré je vhodné (odporúčané) používať asynchrónnym spôsobom a takisto konštatujeme, že dôležitým aspektom je pritom sledovanie interných stavov objektu uvedenej triedy. Táto podmienka vyplýva z požiadaviek jednotlivých operácií, ktoré môžu byť vykonané iba ak sa výkonný proces nachádza v konkrétnom stave. Následne uvádzame, že jednou z možností použitia triedy MediaPlayer je aj prehrávanie multimédií na pozadí s využitím systému služieb (services). V tomto prípade však musíme reagovať na prípadné pozastavenie aktivity systémom Android pri prechode zariadenia do režimu spánku (sleep). V závere prvej časti článku opisujeme možnosti prechodu objektu triedy MediaPlayer do stavu Prepared a v stručnosti charakterizujeme základné metódy tejto triedy. V druhej časti článku opisujeme triedu SoundPool, ktorá nahráva médiá asynchrónne v samostatnom vlákne. Konštatujeme, že oproti triede MediaPlayer, ktorá je určená na prehrávanie objemovo väčších súborov (napr. kompletných hudobných skladieb), je trieda SoundPool vhodná na prehrávanie krátkych zvukov (napr. zvukových efektov). Výrazným rozdielom voči triede MediaPlayer je možnosť prehrať jednotlivé zvukové vzorky simultánne. V závere tohto bloku uvádzame parametre metódy int streamID play() a sumarizujeme metódy, ktoré s týmito parametrami súvisia. Nakoniec charakterizujeme metódy triedy SoundPool určené na pozastavenie/spustenie/zastavenie prehrávania a metódu release(), ktorá je rovnako ako v prípade triedy MediaPlayer, určená na uvoľnenie alokovaných zdrojov.

obr1

Programujeme pre Android 23
XML a animácie

V tomto článku sa venujeme dvom zdanlivo nesúvisiacim témam. Prvou je práca s XML súbormi a druhou použitie animácií. Aj keď ide o dve samostatné témy, obe sa svojim spôsobom týkajú XML súborov. V prvej časti článku popisujeme spôsoby prehliadania XML súborov. Najskôr definujeme XML súbory ako textové – čitateľné (human-readable) súbory, ktoré sa stali štandardom pre výmenu konkretizovaného druhu informácií. Tie sú v XML súboroch štruktúrované pomocou tzv. značiek (tags). Reťazce reprezentujúce značky nie sú ničím obmedzené a je iba na používateľovi, akú konkrétnu množinu reťazcov (ich hierarchiu) navrhne. V ďalšom uvádzame, že Android umožňuje prehliadať (parse) XML súbory a čítať údaje, ktoré obsahujú, pomocou rozhrania XmlPullParser a jeho implementácií kXML a eXpat. Prvú časť článku uzatvárame výpisom jednoduchého algoritmu prehliadania XML súborov. V druhej časti článku konštatujeme, že animácie, ktoré ponúka Android API, sú založené na jednoduchom princípe interpolácie štartovacích (startValue) a koncových (endValue) hodnôt. Výpočty sú pritom riešené na základe stanovených kritérií v stanovenom čase. Následne uvádzame rozdiel medzi animáciami vlastností (property animation) a zobrazení (view animation), ktoré ďalej rozdeľujeme na tzv. tween animácie (trieda Animation) a frame animácie (využívajú AnimationDrawable). V skrátenej forme sa venujeme detailom týkajúcich sa všeobecných charakteristík animácií, potomkov triedy Animator a metód triedy view.animation. Článok ukončujeme konštatovaním, že animačný systém Androidu používa na definíciu animácií a interpolátorov XML súbory, v rámci ktorých rozlišuje konkrétne značky pre oba základné typy animácií, ako aj príslušné značky pre tween a frame animácie.

obr2obr1

Programujeme pre Android 22
Ukladanie a záloha údajov

Tento článok seriálu venujeme stručnému popisu možností ukladania (storage) a zálohy (backup) údajov. Zameriavame sa pritom na tzv. zdieľané vlastnosti aplikácií. V prvej kapitole uvádzame šesť základných možností ukladania údajov: 1. Zdieľané vlastnosti, 2. Interné úložisko, 3. Externé úložisko, 4. SQLite, 5. Sieťové úložisko a 6. Poskytovatelia obsahu. Ďalej pokračujeme uvedením základných faktov týkajúcich sa zdieľaných vlastností (SharedPreferences – SP). Konštatujeme, že rozhranie SP predstavuje najjednoduchšiu formu uchovávania údajov a vlastností aplikácií, ktorého metódy sú určené na sprístupnenie a modifikáciu párov kľúč:hodnota. Venujeme sa inicializačnej metóde Context.getSharedPreferences() s uvedením zoznamu jej operačných módov. Túto kapitolu článku uzavierame uvedením detailov týkajúcich sa metód rozhrania SP.Editor. V nasledujúcej kapitole sa venujeme špeciálnej službe OS Android určenej na zálohovanie údajov a nastavení aplikácií na cloudové úložisko. Uvádzame API BackupManager, ktoré žiada konkrétnu aplikáciu o údaje, ktoré majú byť zálohované a prenáša ich na cloudové úložisko. Aplikácia musí byť na úložisku registrovaná. Na obnovu údajov z úložiska nie je nutné vykonávať žiadnu činnosť. O všetko sa automaticky postará API, ktoré v prípade reinštalácie aplikácie, resp. továrenského resetu zariadenia zareaguje samostatne. V predposlednej kapitole sa venujeme praktickej realizácii – registrácii aplikácie na úložisku Android Backup Service, úprave manifestu aplikácie a definícii programového kódu tzv. zálohovacieho agenta. Článok uzatvárame uvedením postupu ručného zálohovania a obnovy údajov, ktorý využijeme počas vývoja aplikácií.

obr2obr1

Programujeme pre Android 21
Viacdotykové ovládanie

Zámysel prípravy článku o viacdotykovom ovládaní vznikol na základe hesla škola hrou a to najmä preto, že sa v ňom venujeme jednoduchej, avšak veľmi užitočnej vlastnosti (feature) systému Android. Touto vlastnosťou, resp. metódou vstupu je viacdotykové (multi-touch) ovládanie, alebo tiež systém gést (gestures). V úvode článku uvádzame základné informácie o tejto zaujímavej metóde interakcie používateľa so systémom. Popisujeme pojem viacdotykové ovládanie pričom komentujeme túto špecifickú vlastnosť systému Android, ktorý rozoznáva, že používateľ sa dotýka obrazovky viacerými ukazovateľmi a po vykonaní analýz generuje príslušné typy udalostí. V úvodnej kapitole sa ďalej venujeme elementárnym udalostiam a označovaniu ukazovateľov pomocou indexov a identifikátorov. V nasledujúcom bloku popisujeme systém autodetekcie obvyklých, resp. bežne používaných gést, ktorý je založený na mechanizme získavania informácií o dotykových udalostiach a interpretácii získaných údajov vo forme konkrétneho gesta. Článok ďalej pokračuje uvedením vzorky praktického príkladu implementácie uvedenej metódy. Konkrétne ide o časť zdrojového kódu vykonávajúceho zmenu veľkosti (scale) ImageView. Pri práci využívame metódu onTouch() konkrétneho ImageView a ďalej príslušné metódy tried ScaleGestureDetector a SimpleOnScaleGestureListener. V poslednom bloku vysvetľujeme akým spôsobom možno prepojiť fyzické zariadenie s emulátorom. Komentujeme existenciu AVD manažéra ako emulátora určeného na správu virtuálnych zariadení. Z dôvodu simulácie viacdotykového ovládania v rámci emulátora uvádzame postup veľmi elegantného a naviac lákavého a zaujímavého prepojenia fyzického zariadenia s virtuálnym s využitím aplikácie SDK Controller.

obr1

Programujeme pre Android 20
AsyncTask, Handler, HandlerThread

V tejto časti seriálu sa vraciame k popisu tried súvisiacich s vykonávaním úloh (tasks) v samostatných vláknach (threads). Uvádzame tak rozsiahlejšiu tému, ktorej sa budeme venovať nielen v tejto časti, ale aj v budúcich častiach seriálu. V úvode konštatujeme, že vykonávanie časovo náročných úloh mimo hlavného používateľského vlákna (main UI thread) aplikácie je príznačnou črtou Androidu. OS týmto spôsobom rieši problém blokovania (not responding) spustených aktivít, ktorých dôvodom je zväčša vykonávanie kódu náročného na systémové prostriedky – IO operácie, práca v sieťovom prostredí, nadväzovanie komunikácie... V prvej časti článku popisujeme triedu AsyncTask, ktorá umožňuje spustenie kódu na pozadí (background) a zápis výsledku do hlavného používateľského vlákna (main UI thread) aplikácie bez potreby detailnej správy vlákien resp. riadiacich (obslužných) programov (handlers). Ide o tzv. pomocnú triedu (helper class), ktorú možno v princípe použiť na jednorázové spustenie špecifickej úlohy na pozadí. V ďalšom bloku uvádzame triedu Handler, ktorá je určená na riadenie (obsluhu) správ nachádzajúcich sa v zozname úloh (MessageQueue) konkrétneho vlákna (thread). Informujeme o používaní handlerov na plnenie dvoch základných úloh a uvádzame niekoľko základných čŕt týchto obslužných programov. V poslednom, najrozsiahlejšom bloku, sa venujeme triede HandlerThread. Popisujeme jej hlavné výhody oproti triedam AsyncTask a Thread+Looper. Teoretický výklad dopĺňame o konkrétne úryvky programového kódu implementujúceho HandlerThread od vytvorenia inštancie triedy Handler pre UI vlákno a inštancie vlastnej triedy MyThread rozširujúcej HandlerThread až po implementáciu samotnej triedy MyThread.

obr1

Programujeme pre Android 19
Camera2 API

V devätnástej časti seriálu sa začíname venovať práci s kamerou, konkrétne tzv. Camera2 API, ktoré bolo uvedené s príchodom Android 5.0 Lollipop – API Level 21. V úvode článku uvádzame súčasný stav a hlavné rozdiely medzi pomerne novým rozhraním Camera2 API a zastaralým, resp. neaktuálnym (deprecated) rozhraním Camera API, ktoré je síce stále možné využiť, avšak s istými obmedzeniami. Konštatujeme pritom, že nové API je modernejšie, výkonnejšie a zahŕňa rozšírené nastavenia kamery vrátane tzv. RAW snímkovania. V ďalšom bloku rozdeľujeme úlohy plnené pri používaní rozhrania Camera2 API medzi šesť základných súčastí (module parts): CameraManager, CameraDevice, CameraCharacteristics, CameraCaptureSession, CaptureRequest a CaptureResult. Následne sa v krátkosti zmieňujeme o aplikačnom diferencovaní rozhraní. Uvádzame, že konkrétna implementácia pomocou Camera API je pomerne jednoduchá a „priamočiara“. Hneď nato však konštatujeme, že naše články zameriame na druhý, zložitejší, avšak účelovejší spôsob práce s kamerou. V najrozsiahlejšom bloku sa venujeme praktickému používaniu Camera2 API. Prácu s kamerou rozčleňujeme a popisujeme v rámci šiestich blokov: 1. príprava plochy (surface), do ktorej bude smerovaný výstup z kamery, 2. získanie inštancie triedy CameraManager, načítanie vlastností kamery a sprístupnenie kamery, 3. implementácia tzv. callback triedy určenej na získavanie aktualizovaných stavov kamery, 4. sprístupnenie plochy, vytvorenie požiadavky na tvorbu snímok, 5. vytvorenie relácie určenej na tvorbu snímok, implementácia callback triedy súvisiacej s pravidelnou tvorbou snímok, 6. vytvorenie samostatného vlákna (thread) obsahujúceho tzv. Looper (MessageQueue) a zaslanie požiadavky na príjem nekonečného sledu snímok z kamery.

obr2obr1

Programujeme pre Android 18

V tejto časti seriálu predstavujeme prácu s tzv. senzormi, z ktorých minimálne jeden je súčasťou všetkých moderných androidových zariadení. Na začiatku článku sa venujeme vzťahu medzi senzormi – špecializovanými komponentami určenými na meranie konkrétnych fyzikálnych veličín a androidovými zariadeniami. Uvádzame niektoré detaily ako napr. rozdiely medzi tzv. hardvérovými snímačmi a syntetickými, resp. virtuálnymi senzormi. Základné informácie dopĺňame o typy, resp. kategórie senzorov. V najrozsiahlejšej časti článku rozoberáme Android sensor framework a prácu s týmto frameworkom. Uvádzame zoznam jeho komponentov – tried, rozhraní a ich metód, ktoré umožňujú v prvom rade sprístupniť konkrétne senzory pre využitie v rámci našich aktivít a následne načítať údaje poskytované týmito senzormi. V súvislosti s využívaním konkrétnych metód jednotlivých tried frameworku kladieme dôraz na popis dvoch základných úloh: 1. Identifikácia senzora a jeho možností, 2. Sledovanie udalostí senzora. V rámci popisu prvej úlohy uvádzame princíp sprístupnenia senzorov a úpravy ich vlastností. Pri druhej úlohe sledujeme udalosti senzorov, ktoré vznikajú v okamihu kedy senzory detegujú zmenu meraných veličín. V závere článku sa ako zvyčajne venujeme praktickému programovaniu. Uvádzame základné kroky pri získavaní údajov poskytovaných konkrétnym senzorom, ktorými sú: vytvorenie inštancie (referencie) služby, identifikácia prítomnosti konkrétneho senzora v zariadení, registrácia snímača udalostí a povinná implementácia dvoch metód rozhrania SensorEventListener.

obr1

Programujeme pre Android 17

API operačného systému Android nám ponúka viacero možností vývoja aplikácií, v rámci ktorých plánujeme kresliť 2D/3D grafiku. Už dávno sa pritom nepoužíva nízkoúrovňové (low-level) programovanie, ale hardvérové zariadenia (vrátane GPU) participujúce na výslednom efekte sa programujú na omnoho vyššej úrovni (high-level). Priama komunikácia s koncovými zariadeniami je pritom nahradená komunikáciou s tzv. abstraktnou hardvérovou vrstvou (Hardware Abstraction Layer), ktorá vytvára vzťah medzi aplikáciou a jej API a zmenou foto-elektrických vlastností konkrétnych pixlov obrazovky vedúcich k zmene ich farby. V minulej časti seriálu sme si popísali možnosť kreslenia pomocou plátna (Canvas) a funkcií štandardného API. Dnes sa zameriame na ďalší, omnoho efektívnejší spôsob, ktorým je rendering s využitím funkcií grafickej knižnice OpenGL ES (GLES).

obr2obr1

Programujeme pre Android 16

Súčasťou vývojového prostredia Android Studio, ktoré používame na tvorbu vzorových aplikácií, je pomerne sofistikovaný nástroj na vizuálnu editáciu XML súborov. Tie sú v rámci Androidu okrem iného používané aj na ukladanie vlastností I/O prvkov (widgets). Uvedené prvky sú súčasťou návrhov (layouts) grafických rozhraní (GUI) konkrétnych aktivít. Editor pracujúci v návrhovom (design), resp. textovom režime, nám umožňuje vizuálnou formou usporiadať preddefinované prvky, ktoré môžeme vyberať z pomerne rozsiahlej palety. Podrobné možnosti nastavenia vlastností týchto prvkov nám umožňujú prispôsobiť ich vzhľad a chovanie našim potrebám. Napriek tomu, že ponúkané možnosti sú skutočne široké, nie sú nekonečné a skôr či neskôr dospejeme do stavu, kedy budeme chcieť vytvoriť úplne nový grafický I/O prvok. Takisto sa určite stretneme so situáciou, pri ktorej budeme chcieť na obrazovku zariadenia vykresliť ľubovolnú grafiku bez akýchkoľvek obmedzení.

obr2obr1

Programujeme pre Android 15

Táto časť seriálu bude teoretickou prezentáciou najnovších úprav, ktoré sme vykonali vo vzorovej aplikácii db_sync. Ich dôvodom, resp. dôvodom doplnenia príslušných častí (tried a metód) programového kódu bola implementácia systému pripomienok (reminder). Našim cieľom je ku každej položke zoznamu úloh pripojiť údaj o dátume a čase, kedy nám má aplikácia danú úlohu pripomenúť. Túto vlastnosť (feature) aplikácie db_sync neskôr plánujeme použiť aj v rámci aplikácie plánovač.

obr2obr1

Programujeme pre Android 14

V dnešnom článku sa plnou silou vrhneme na praktickú implementáciu pridávania súborov (konkrétne obrázkov) k položkám zoznamu a následnú synchronizáciu databáz. Napriek tomu, že budeme musieť mnoho vecí zjednodušiť, pokúsime sa popísať celý proces od výberu obrázku z galérie smartfónu až po jeho uloženie na server. Zameriame sa pritom na pridávanie konkrétneho typu súboru, ktorým je obrázok. Nič nám však nebráni v tom, aby sme rovnaký postup zovšeobecnili a umožnili tak používateľom pridávať k položkám zoznamu akékoľvek typy súborov. V konečnom dôsledku vždy ide o HTTP prenos údajových bytov a je jedno či tieto byty reprezentujú obrázok, textový dokument, prezentáciu, hudobnú skladbu, či iný typ súboru.

obr2obr1

Programujeme pre Android 13

Touto časťou seriálu budeme pokračovať v procese vývoja vzorovej aplikácie db_sync. Zameriame sa na prácu so súbormi. V prvom rade si uvedieme základné fakty týkajúce sa súborových systémov (file systems), ktoré dokáže využiť OS Android. Následne si v stručnosti popíšeme triedy a metódy, ktoré budeme používať pri práci so súbormi v rámci našej vzorovej aplikácie.

obr2obr1

Programujeme pre Android 12

V tejto časti seriálu si popíšeme nové bloky programového kódu aplikácie db_sync, pomocou ktorých sme ukončili implementáciu všetkých častí CRUD (Create Read Update Delete) = skupina príkazov umožňujúcich manipuláciu s údajmi uloženými v tabuľkách databáz. Vytváranie a čítanie údajov z tabuliek umožňovala už prvá verzia aplikácie. Do druhej verzie sme doplnili časti súvisiace s aktualizáciou a mazaním údajov. V neposlednom rade sme aplikáciu rozšírili o BroadcastReceiver periodicky kontrolujúci výskyt zmien v MySQL databáze.

obr2obr1

Programujeme pre Android 11

Po dvoch teoretických častiach seriálu, v ktorých sme sa venovali prepojeniu Androidovej databázy SQLite s databázou MySQL sa dostávame k časti, v ktorej teoretické poznatky „pretavíme“ do praxe. Prílohou tejto časti seriálu je prvá verzia vzorovej aplikácie, v rámci ktorej si prakticky ukážeme jeden z možných spôsobov synchronizácie SQLite a MySQL databáz (konkrétne obsahu ich tabuliek).

obr2obr1

Programujeme pre Android 10

V dnešnej časti seriálu si popíšeme sled činností, vykonaním ktorých implementujeme synchronizáciu údajov uložených v internej SQLite databáze (zariadenie Android) s údajmi uloženými v externej MySQL databáze (W/LAMP web server). V podstate ide o podobné úlohy aké sme si popísali v minulej časti seriálu ale z trochu iného pohľadu. V tomto prípade neuvažujeme iba nad priamou správou údajov uložených v MySQL databáze, ale ide nám o pravidelnú synchronizáciu databáz. Popíšeme si dva prípady a to synchronizáciu v prípade zmeny obsahu externej databázy a synchronizáciu v prípade zmeny obsahu internej databázy. Všetky informácie neskôr použijeme na prípravu vzorovej aplikácie implementujúcej obidva postupy. Praktická časť vrátane zdrojového kódu aplikácie budú prílohou budúcej časti seriálu.

obr2obr1

Programujeme pre Android 9

Táto časť seriálu bude teoretickým úvodom k pomerne rozsiahlemu bloku, v ktorom sa budeme venovať interakcii medzi aplikáciami písanými pre Android a údajmi uloženými a spravovanými MySQL databázou. Napriek tomu, že Android dokáže pristupovať k takto uloženým údajom priamo, takýto postup sa neodporúča. Rovnako sa neodporúča riešiť akékoľvek sieťové prenosy v hlavnom programovom vlákne. Toto je príznačnou črtou Androidu, ktorý s veľkou výhodou využíva na splnenie podobných úloh ďalšie tzv. sprostredkujúce (intermediate) prvky – predpripravené triedy – služby. V našom prípade pôjde najmä o PHP skripty a nástroje pracujúce s formátom JSON (JavaScript Object Notation).

obr2obr1

Programujeme pre Android 8

Úlohou tejto časti seriálu je popísať zmeny vykonané v našej vzorovej aplikácii týkajúce sa jej novej funkcionality a ozrejmiť dotknuté oblasti súvisiacej teórie. Medzi najnovšou (v.3) a predošlou (v.2) verziou aplikácie planovac sú dva funkčné rozdiely:
1. doplnenie novej aktivity (sub-aktivity) – definícia príslušnej triedy, spustenie sub-aktivity, získanie požadovaného výsledku, komunikácia medzi aktivitami,
2. úprava aplikácie súvisiaca s doplnením času plánovaného vykonania úlohy.

obr2obr1

Programujeme pre Android 7

V dnešnej časti seriálu sa zameriame na implementáciu tzv. poskytovateľov, resp. vyhodnocovačov obsahu (content providers, resolvers) a takisto komponentov (tried), ktoré s nimi určitým spôsobom súvisia. Pretože používanie výrazov "poskytovateľ", resp. "vyhodnocovač" môže viesť k istým nejasnostiam, v našich článkoch budeme používať ich anglické ekvivalenty. Provider a ďalšie nevyhnutné triedy zahrnieme do vzorovej aplikácie planovac_v2.

obr2obr1

Programujeme pre Android 6

Po úvodných článkoch venovaných teórii sa dostávame k zaujímavejšej – praktickej časti. K článku prvý krát prikladáme zdrojový kód vzorovej aplikácie. Pri jeho popise sa nebudeme venovať detailom, to by ďaleko presiahlo rozsah tohto seriálu. Ako sme však boli zvyknutí z minulosti, samotný zdrojový kód doplníme o množstvo komentárov a spresňujúcich informácií.

obr2obr1

Programujeme pre Android 5

Napriek tomu, že hlavnou náplňou tohto seriálu je programovanie, ktorého výsledkom majú byť spustiteľné aplikácie, stále sa mu nemôžme naplno venovať. Špecifická štruktúra aplikácií určených pre OS Android nám nedovoľuje začať programovať bez vysvetlenia významu nasledujúcich štyroch komponentov: 1. aktivity, 2. služby, 3. poskytovatelia obsahu, 4. prijímače oznámení.

  • Článok: clanok5.doc
  • Publikované v Infoware 11-12/2014
obr1

Programujeme pre Android 4

Po rýchlom úvode je čas na ešte rýchlejšie predstavenie základných stavebných prvkov aplikácií písaných pre OS Android. Začneme popisom súborovej štruktúry a možností rozmiestnenia (layouts) grafických prvkov (widgets).

obr2obr1

Programujeme pre Android 3

Skôr ako začneme písať prvé riadky programového kódu sa musíme oboznámiť s niekoľkými principiálnymi rozdielmi medzi programovacími jazykmi C++ a Java. Je trúfalé tieto rozdiely sumarizovať v rámci jediného článku, avšak z dôvodu zamerania sa na samotné programovanie pre Android je to viac než nutné.

obr2obr1

Programujeme pre Android 2

Meškanie tohto seriálu voči dátumu vydania Android 1.0 SDK (Software Development Kit) je viac ako 5 rokov. Z dôvodu zníženia tohto časového sklzu musíme postupovať rýchlo čo bude badateľné najmä v prvých článkoch. Aby sme však dali šancu aj začiatočníkom, na internetovej stránke autora (softengine.sk) budeme uvádzať ďalšie detaily a okrem toho v rámci nej vytvoríme interaktívnu časť umožňujúcu klásť otázky. V tomto článku si predstavíme IDE (Integrated Development Environment), ktoré sú určené na vývoj, resp. majú súvis s vývojom aplikácií pre Android. Inštaláciu jednotlivých IDE sme realizovali na novo nainštalovanom OS Linux Ubuntu 12.04.3 LTS (precise) v základnej konfigurácii bez vopred nainštalovaných závislých balíčkov.

obr2obr1

Programujeme pre Android 1

Na konci a takisto na začiatku každého kalendárneho roka sme plní záväzkov, predsavzatí a prianí. Mnohí z nás očakávajú zmeny či už v súkromnom, alebo v pracovnom živote. Bez ďalších slov uvedieme, že práve očakávaný príchod Nového roka bol jedným z dôvodov vzniku nového seriálu. V jeho prvej časti sa budeme venovať dvom témam. Najskôr sa vrátime k seriálom, ktoré sme ukončili v decembri minulého roka. V druhej polovici článku zodpovedáme otázku prečo sme sa rozhodli uverejniť práve seriál o programovaní pre Android.

obr1