Android alapú szoftverfejlesztés kezdőknek Gyakorlati feladatsor oktatási segédanyag, mely a

Hasonló dokumentumok
SZOFTVERFEJLESZTÉS ANDROID PLATFORMRA. Dr. Iszály György Barna

SZOFTVERFEJLESZTÉS ANDROID PLATFORMRA. Dr. Iszály György Barna


Broadcast Service Widget

Android Wear programozás. Nyitrai István

Overview. Service. Application Activity Activity 2 Activity 3. Fragment. Fragment. Fragment. Frag ment. Fragment. Broadcast Receiver

UI megismerése, különböző felbontások támogatása, használati jogok kérése

E-Freight beállítási segédlet

ANDROID ALKALMAZÁSFEJLESZTÉS

ANDROID ALKALMAZÁSFEJLESZTÉS

Alap számológép alkalmazás

QLink Universal SOFTPHONE - TELEPÍTÉSI ÚTMUTATÓ

Levelezési beállítások

SZOFTVERFEJLESZTÉS ANDROID PLATFORMRA. Dr. Iszály György Barna

4. A konténerek Konténerek LinearLayout

ANDROID ALKALMAZÁSFEJLESZTÉS

Kormányzati Elektronikus Aláíró és Aláírás-ellenőrző Szoftver

Felhasználói felület megismerése, különböző felbontások támogatása

TERC V.I.P. hardverkulcs regisztráció

3. Egyszerű komponensek

Kormányzati Elektronikus Aláíró és Aláírás-ellenőrző Szoftver

Android alapok. Android játékfejlesztés

Gyakorló 9. feladat megoldási útmutató

Sygic: Voucher Edition for Android telepítése

kommunikáció Megoldások

1 Rendszerkövetelmények

DuneHD.hu. Kompatibilis médialejátszók: Dune HD Center Dune BD Prime Dune HD Base 2.0 Dune HD Base 3.0 Dune BD Prime 3.0

Útmutató parkolás indításához és leállításához

Felhasználói leírás a DimNAV Server segédprogramhoz ( )

Távolléti díj kezelése a Novitax programban

Programozási technológia

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Java Programozás 5. Gy: Java alapok. Adatkezelő 1.rész

Telenor Webiroda. Kezdő lépések

KEZELÉSI ÚTMUTATÓ WIFI ADAPTER

SSL VPN KAPCSOLAT TELEPÍTÉSI ÚTMUTATÓ

A fájlkezelés alapjai

Belépés Budapest, Ady Endre utca

Pénzintézetek jelentése a pénzforgalmi jelzőszám változásáról

1. DVNAV letöltése és telepítése

Szilipet programok telepítése Hálózatos (kliens/szerver) telepítés Windows 7 operációs rendszer alatt

Tisztelt Felhasználó!

A TERC VIP költségvetés-készítő program telepítése, Interneten keresztül, manuálisan

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

A FileZilla program beállítása az első belépés alkalmával

A Java nyelv. Dialógus ablakok. Elek Tibor

Java programozási nyelv 6. rész Java a gyakorlatban

O365 és felhő szolgáltatások igénybevételéhez szükséges beállítások

Android Commander Felhasználói kézikönyv

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

ContractTray program Leírás

Felhasználói útmutató a portal.nakvi.hu oldalhoz

ServiceTray program Leírás

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Access gyakorlati feladatok lépésről lépésre

GPRS Remote. GPRS alapú android applikáció távvezérléshez. Kezelési útmutató

Oszkar.com Android alkalmazás v1.2

Általános fiók beállítási útmutató

Két csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később).

Rendszergazda Debrecenben

Ügyfélkapuból hivatalos ügy indítása

DebitTray program Leírás

Entity Framework alapú adatbáziselérés

Interaktív alkalmazások készítése Scratch-ben

Felhasználói útmutató CVR mobil kliens, ios rendszerhez.

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

ADATSZOLGÁLTATÁS központi honlap használata esetén

Dropbox - online fájltárolás és megosztás

RIEL Elektronikai Kft v1.0

A mobil alkalmazás. Felhasználói útmutató - Android

Felhasználói segédlet

Tájékoztató. Használható segédeszköz: -

Mobil Telefonon Keresztüli Felügyelet Felhasználói Kézikönyv

TaxiLike használati bemutató Taxitársaságok és Taxisofőrök részére

Választó lekérdezés létrehozása

A WORDPRESS TESTRESZABÁSA (MEGJELENÉS MENÜ ELEMEI)

A Novitax ügyviteli programrendszer első telepítése

Kezdő lépések. Céges . Tartalom

Swing GUI készítése NetBeans IDE segítségével

Java gyakorlat feladatai e s megolda sai ( )

UI megismerése - 2. rész Adattárolás

Új jelszó beállítása. Új jelszó beállítása az IFA rendszerhez. BIZALMAS INFORMÁCIÓ JET-SOL JET-SOL 2.0 verzió

Reenger alkalmazás Felhasználói kézikönyv

Felhasználói segédlet

Kezdő lépések Outlook Web Access

Tanúsítvány igénylése sportegyesületek számára

FELHASZNÁLÓI KÉZIKÖNYV

e-nhh ELEKTRONIKUS RLAPOK ÜGYFÉLOLDALI FELÜLETEI

HP Color LaserJet CM3530 MFP sorozat Gyors referencia útmutató. Művelet: Másolás. Digitális küldés. Fax. Feladatok tárolása

1. Mire használható a ViCA (Virtuális Chipkártya Alkalmazás)?

Felhasználói Kézikönyv

Grafikus felhasználói felületek. Dr. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Dr.

WordPress segédlet. Bevezető. Letöltés. Telepítés

ANDROID ALKALMAZÁS FEJLESZTÉS

Hiba bejelentés azonnal a helyszínről elvégezhető. Egységes bejelentési forma jön létre Követhető, dokumentált folyamat. Regisztráció.

Hiteles elektronikus postafiók Perkapu

Hogyan készítsünk Colorbox-os képgalériát Drupal 7-ben?

Vodafone-os beállítások Android operációs rendszer esetében

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

Oktatási segédanyag. Weboldalszerkesztési gyakorlatok

Átírás:

oktatási segédanyag, mely a Társadalmi Megújulás Operatív Program Határon átnyúló együttműködés a szakképzés és a felnőttképzés területén c. pályázati felhívás keretében megvalósított Mobil alkalmazásfejlesztés az informatikai tudás innovatív alkalmazásával című, TÁMOP-2.2.4-11/1-2012-0055 kódszámú projekt keretében valósult meg. 2013.

1 Tartalomjegyzék 1. Bevezetés...3 2. Az Android operációs rendszer...4 2.1. Feladatok...4 3. Az alkalmazások felépítése...5 3.1 Az alkalmazások futtatási környezete...5 3.2 Az alkalmazások építőkövei, a komponensek...5 3.3 Manifest állomány...5 3.4 Erőforrások...5 4. Az Activity életciklusa, környezete...6 5. Felhasználói felületek...7 5.1. Feladatok felhasználói felületekhez...7 5.2. LinearLayout...7 5.2.1. Példa LinearLayout-ra...7 5.2.2. Feladat LinearLayot-hoz...10 5.3. RelativeLayout...10 5.3.1. Példa RelativeLayout-ra...10 5.3.2. Feladat RelativeLayout-hoz...13 5.4. Feladatok további Layout-okhoz...13 5.5. Témák és stílusok...14 5.5.1. Példa stílusra...14 5.5.2. Feladatok stílusokra...15 5.6. Animációk...15 5.6.1. Feladatok tweened animációra...15 5.6.2. Feladatok frame by frame animációra...16 5.6.3. Példa property animation-re...16 5.6.4. Feladatok property animation-ra...17 6. Komponensek közötti kommunikáció...18 6.1. Activity-k...18 6.1.1. Példák Activity-k indítására...18 6.1.1.1. Activity indítása Explicit Intent segítségével...18 6.1.1.2. Activity indítása Implicit Intent segítségével, visszatérési adatok kezelésével...18 6.1.1.3. Activity indítása Implicit Intent segítségével...19 6.1.1.4. Activity indítása Explicit Intent segítségével, extra adatok átadásával...19 6.1.2. Feladatok Activity-k indításához...19 6.2. Alkalmazás felkészítése kérések kiszolgálására Intent Filter...19 6.2.1. Példa Intent Filter-re...19

2 6.2.2. Feladatok Intent Filterek-hez...20 6.3. Broadcast események...20 6.3.1. Példa Broadcsat események hívására...20 6.3.2. Példa Broadcast esemény fogadására...20 6.3.3. Feladatok Broadcast eseményekhez...21 7. Állománykezelés...22 7.1 Feladatok kulcs-érték párok tárolásához...23 7.2. Feladatok a belső tároló használatához...25 7.3. Feladatok külső tároló használatához...28 8. Alkalmazások közzététele...29 8.1 Tegyük elérhetővé az Android eszközödet a közvetlenül telepíthető alkalmazások számára! Telepítsen egy korábban elkészített programot közvetlenül ezek után!...29 8.2 Egy korábban készült alkalmazást tegyen közzé egy nyilvános weblapon, kiegészítve az elérést egy QR kóddal is! Az alkalmazás URL-jén kívül milyen egyéb típusú adatot adhatunk meg a segítségével?...29 8.3 Keressen és telepítsen fel egy (legális) piactér alkalmazást az eszközre a Google Play mellé! Miben tér el, mi a sajátossága a közismert Play-hez képest?...30 8.4 Hogyan kategorizálja a Google Play a letölthető alkalmazásokat! Minél több módot gyűjtsön össze!...30 8.5 Egy korábban készült alkalmazást készítsen elő közzétételre!...30 9. Összetett alkalmazások készítése...31

1. Bevezetés Android alapú szoftverfejlesztés kezdőknek 3 unkban arra vállalkozunk, hogy gyakorlati útmutató adjunk az Android alapú szoftverfejlesztés kezdőknek című jegyzet használóinak. A gyakorlati feladatsort úgy igyekeztünk összeállítani, hogy az kövesse az elméleti részben leírtakat, és azokat gyakorlati példákkal egészítse ki a jobb érthetőség kedvért. Ennek érdekében, minden fejezetet először az adott témakörrel foglalkozó példaprogramok bemutatásával kezdjük, majd pedig önállóan megoldandó feladatok elé állítjuk az olvasót. A feladatok megoldásához sok esetben elég az elméleti rész és a gyakorlati rész példaprogramjainak előzetes áttekintése és elemzése, azonban számos esetben szükséges, hogy a kedves olvasó egyes megoldásokhoz maga is elmélyedjen az Android platform programozását leíró oldalak tartalmában. Ez azért is szükséges, mivel mind az elméleti, mind a gyakorlati rész véges terjedelmű, így nem kerülhetett bele minden részlet, amit bele szerettünk volna írni. Másrészt, az Android rendszer napról napra fejlődik, és így előfordulhat, hogy mikorra ezen sorokat kedves használó kezébe veszi, akkorra már a benne foglaltak egy része elavulttá vált. Bízunk benne, hogy az elméleti részt kiegészítve, ez a rövid gyakorlati útmutató is hasznos segítséget tud majd nyújtani az Android programozását most kezdő érdeklődők számára.

2. Az Android operációs rendszer 2.1. Feladatok Android alapú szoftverfejlesztés kezdőknek 4 1. Térképezze fel az Android operációs rendszer különböző verzióit! Gyűjtse össze, hogy az egyes verziók milyen újításokat hoztak! 2. Telepítse fel a Java SE Development Kit (JDK) 1 csomagot! 3. Telepítse a Android Software Development Kit (SDK) 2 -et! 4. Az AVD Manager segítségével hozzon létre egy emulátort, majd telnetelje be rá, és próbáljon meg különböző eseményeket előidézni, mint például bejövő, vagy kimenő hívás, vagy SMS! 5. Telepítse fel az Eclipse integrált fejlesztői környezetet! Ismerkedjen a felhasználói felülettel! 6. Hozzon létre egy Android alkalmazást, majd vizsgálja meg, hogy milyen könyvtári struktúra tartozik az alkalmazáshoz, és hogy abban milyen állományokat találhat! 7. Fordítsa le az alkalmazást, majd vizsgálja meg az apk kiterjesztésű állomány tartalmát! 1 Oracle Technlogy Network Java Java SE Downloads - http://www.oracle.com/technetwork/java/javase/downloads/index.html 2 Android SDK Download - http://developer.android.com/sdk/index.html

3. Az alkalmazások felépítése 3.1 Az alkalmazások futtatási környezete Android alapú szoftverfejlesztés kezdőknek 5 1. Hogyan biztosítja az Android az alkalmazások egymástól való szeparálását? 2. Hogyan rendeljük egyértelműen az elkészült alkalmazást egy konkrét fejlesztőhöz? 3.2 Az alkalmazások építőkövei, a komponensek 1. Hogyan használhatjuk fel a meglévő alkalmazásokat saját program írása esetén? 2. Listázzuk ki Androidos eszközünkön a jelenleg futó szolgáltatásokat! 3. Miben különböznek a rendszerezett Broadcastek a normáltól? 3.3 Manifest állomány 1. Hogyan ellenőrizzük le az alkalmazás kompatibilitását egy adott eszközön? 2. Mivel biztosítjuk az alkalmazáscsomagunk egyediségét? 3. Honnan tudjuk, mely komponensével kezdjük egy alkalmazás futtatását? 3.4 Erőforrások 1. Hogyan különül el egy Android alkalmazásban a kód az erőforrásoktól? 2. Hogyan lokalizálhatóak az alkalmazásunk erőforrásai több nyelvre is? 3. Hogyan érhetjük el erőforrásainkat a forráskódból?

4. Az Activity életciklusa, környezete Android alapú szoftverfejlesztés kezdőknek 6 1. Milyen főbb állapotai lehetnek egy Activity-nek? 2. Mely állapotokban látható egy Activity a kijelzőn? 3. Mely állapotokban érdemes elmenteni a szenzitív adatokat? 4. Készítsünk alkalmazást, ami naplózza az Activity főbb állapotait! Figyeljük meg, hogy mikor látható közben az Activity?

5. Felhasználói felületek Android alapú szoftverfejlesztés kezdőknek 7 5.1. Feladatok felhasználói felületekhez 1. Vizsgálja meg, hogy az Andorid hogyan kategorizálja a különböző képernyőméreteket! 2. Hozzon létre egy képet, majd készítse el a különböző képernyőméretek szerinti változatait! Ügyeljen a 3:4:6:8 arány betartására! 3. Vizsgálja meg az Eclipse felülettervező részét! Próbáljon meg saját felületeket tervezni ennek a segítségével! 5.2. LinearLayout 5.2.1. Példa LinearLayout-ra Hozzuk létre a következő ábrán látható Layout-ot a LinearLayot használatával. A Layouthoz tartozó xml forrásállomány tartalma a következő lesz: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"

android:layout_height="match_parent" Android alapú szoftverfejlesztés kezdőknek 8 <! match_parent hatására az elem a szülő elem méretét veszi fel --> android:orientation="horizontal" <! Ha az orientation értéke horizontal, akkor a felosztás vízszintes lesz, ha verticval, akkor függőleges --> android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" tools:context=".mainactivity" > <LinearLayout android:id="@+id/linearlayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" <! A fill_parent és a match_parent hatása megegyezik--> android:background="@color/sotetzold" <! A szín beállítására a color.xml-ben megadott erőforrás használata --> android:orientation="vertical" > <TextView android:id="@+id/relative_layout_cimsor" <! A TextView típusú relative_layout_cimsor azonosítójú erőforrás használata --> <! A wrap_content használatakor az elem mérete a tartalmának megfelelő méretű lesz --> android:layout_gravity="center_horizontal" <! Az elem középre lesz igazítva --> android:layout_marginbottom="20dp" android:gravity="center_horizontal"

9 <! Az elemen belül a szöveg középre lesz igazítva --> android:text="@string/linear_layout_cim" android:textappearance="?android:attr/textappearancelarge" android:textcolor="@color/feher" /> <TextView android:id="@+id/egyszeru_szoveg" android:text="@string/szoveg" android:textappearance= "?android:attr/textappearancemedium" android:textcolor="@color/vilagoszold" /> <TextView android:id="@+id/fuggoleges_cimsor" android:layout_margintop="20dp" android:gravity="center_horizontal" android:text="@string/fuggoleges_cimsor" android:textappearance="?android:attr/textappearancelarge" android:textcolor="@color/feher" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="50dp" android:layout_marginleft="5dp" android:layout_marginright="5dp" android:layout_margintop="29dp" android:background="@color/feher" android:gravity="center_horizontal" > <TextView android:id="@+id/elem1" android:layout_width="0dp" android:layout_gravity="center_vertical" android:layout_marginleft="5dp" android:layout_weight="1" android:background="@color/kek" android:text="@string/elem1_szoveg" android:textcolor="@color/feher" /> <TextView android:id="@+id/elem2"

android:layout_gravity="center_vertical" android:layout_marginleft="5dp" android:layout_marginright="5dp" android:background="@color/bordo" android:text="@string/elem2_szoveg" android:textcolor="@color/feher" /> <TextView android:id="@+id/elem3" android:layout_gravity="center_vertical" android:layout_marginright="5dp" android:background="@color/vilagoszold" android:text="@string/elem3_szoveg" /> </LinearLayout> Android alapú szoftverfejlesztés kezdőknek 10 <Button android:id="@+id/gomb_kovetkezo" android:layout_gravity="center_horizontal" android:layout_margintop="50dp" android:text="@string/gomb_kovetkezo" android:textcolor="@color/feher" /> </LinearLayout> </LinearLayout> 5.2.2. Feladat LinearLayot-hoz 1. A fenti példa felhasználásával hozzon létre olyan felhasználói felületeteket, amely csak a LinearLayout-ot használják! 2. Hozzon létre egy alkalmazáshoz több LinearLayot-ot alkalmazó layout-ot! 3. Hozza létre ugyanazon alkalmazáshoz tartozó LinearLayout-ot használó felhasználói felületet portrait (álló) és landscape (fekvő) nézetben. 5.3. RelativeLayout 5.3.1. Példa RelativeLayout-ra

11 Hozzuk létre a képen látható Layout-ot kizárólag RelativeLayot felhasználásával! A Layout-hoz tartozó xml állomány tartalma a következő lesz: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/vilagoszold" android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" tools:context=".relative_activity" > <TextView android:id="@+id/relative_layout_cimsor" android:layout_alignparentleft="true" <! A szülő elem bal oldalához igazítjuk az elemet --> android:layout_alignparenttop="true" <! A szülő osztály tetejéhez igazítjuk az elemet -->

12 android:gravity="center_horizontal" android:text="@string/relative_layout_cim" android:textappearance="?android:attr/textappearancelarge" android:textcolor="@color/sotetzold" /> <TextView android:id="@+id/egyszeru_szoveg" android:layout_alignleft="@id/relative_layout_cimsor" android:layout_below="@id/relative_layout_cimsor" <! A relative_layout_cimsor azonosítójú elem alatt helyezkedjen el az elem --> android:layout_marginbottom="10dp" android:layout_margintop="10dp" android:text="@string/szoveg" android:textappearance="?android:attr/textappearancemedium" android:textcolor="@color/kek" /> <TextView android:id="@+id/elem1" android:layout_alignleft="@id/egyszeru_szoveg" android:layout_below="@id/egyszeru_szoveg" android:layout_marginbottom="10dp" android:background="@color/kek" android:text="@string/elem1_szoveg" android:textcolor="@color/feher" /> <TextView android:id="@+id/elem2" android:layout_below="@id/elem1" android:layout_centerinparent="true" android:layout_marginbottom="10dp" android:background="@color/bordo" android:text="@string/elem2_szoveg" android:textcolor="@color/feher" /> <TextView android:id="@+id/elem3"

android:layout_alignparentright="true" android:layout_below="@id/elem2" android:layout_marginbottom="10dp" android:background="@color/vilagoszold" android:text="@string/elem3_szoveg" /> <Button android:id="@+id/rl_gomb_elozo" android:layout_width="130dp" android:layout_below="@id/elem3" android:layout_margintop="30dp" android:text="@string/gomb_elozo" /> <Button android:id="@+id/rl_gomb_kovetkezo" android:layout_alignparentright="true" android:layout_below="@id/elem3" android:layout_margintop="30dp" android:text="@string/gomb_kovetkezo" /> </RelativeLayout> Android alapú szoftverfejlesztés kezdőknek 13 5.3.2. Feladat RelativeLayout-hoz 1. Hozzon létre olyan felhasználói felületet, amely csak a RelativeLayot-ot használja! 2. Hozzon létre egy alkalmazáshoz több RelativeLayot-ot alkalmazó layout-ot! 3. Hozza létre ugyanazon alkalmazáshoz tartozó RelativeLayoutot használó felhasználói felületet portrait (álló) és landscape (fekvő) nézetben. 5.4. Feladatok további Layout-okhoz 1. Hozzuk létre a következő Layout-okat a TabletLayout és a GridView segítségével.

14 2. Hozzunk létre olyan felhasználó felületeket, melyek több típusú layout-ot alkalmaznak egymással kombinálva. 3. Hozzunk létre olyan felhasználói felületet, melynek egyes elemeire klikkelve különböző Toast üzeneteket kapunk! 5.5. Témák és stílusok 5.5.1. Példa stílusra Különböző stílusok a styles.xml-ben: <resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="beviteli"> <item name="android:textcolor">@color/feher</item> </style> <style name="radiogomb" > <item name="android:textcolor">#00ff00</item> <item name="android:paddingleft">50dp</item> </style> </resources> A stílus alkalmazása a Layout állományban: <EditText android:id="@+id/edittext_neved" style="@style/beviteli" <! A stílus megadása az erőforrás azonosító használatával -->

15 android:layout_marginleft="22dp" android:layout_torightof="@+id/textview_neved" android:background="@color/bezs" android:ems="10" android:inputtype="textcapwords textpersonname" android:textsize="20sp" /> <CheckBox android:id="@+id/checkbox_szeretandroid" style="@style/radiogomb" <! A stílus megadása az erőforrás azonosító használatával --> android:layout_alignleft="@+id/textview_neved" android:layout_below="@+id/textview_neved" android:layout_margintop="16dp" android:text="@string/szeret_android" android:textsize="20sp" /> 5.5.2. Feladatok stílusokra 1. Hozzon létre stílusokat, majd alkalmazza azokat a felhasználói felület elemein! 2. A korábban létrehozott felhasználói felületeket alakítsa át úgy, hogy azok témákat és stílusokat használjanak! 5.6. Animációk 5.6.1. Feladatok tweened animációra 1. Készítsünk olyan animációt, amely klikkelésre megváltoztatja az elem átlátszóságát! 2. Készítsünk olyan animációt, amely klikkelésre lekicsinyíti, vagy felnagyítja az adott elemet! 3. Készítsünk olyan animációt, amely klikkelésre elmozgatja az adott elemet valamilyen irányba! 4. Készítsünk olyan animációt, amely klikkelésre elforgatja az adott elemet valamilyen irányba! 5. Készítsünk olyan animációkat, melyek kombinálják a különböző típusú tweened animációkat!

16 5.6.2. Feladatok frame by frame animációra 1. Animáljon egy pattogó labdát! 2. Animáljon dobókocka dobást! 3. Animálja a napjárást, a holdjárást! 4. Animálja az óra járását! 5. Hozzon létre egy tetszőleges képsorozatot, majd animálja azt! 5.6.3. Példa property animation 3 -re Az Android API 12-es verziójától lehetőség van még egy animációs forma használatára, amellyel szinte minden elem animálható. Ez az eszköz a property animation, amellyel tulajdonképpen ugyanazon animációk hajthatóak végre, mint a tweened animációkkal, de nem csak View elemeken. A következő példa egy szöveg előtűnését, majd érintésre más színűvé válását mutatja be property animation felhasználásával: final TextView prop_anim_szoveg=(textview) this.findviewbyid(r.id.textview_prop); prop_anim_szoveg.setalpha(0); prop_anim_szoveg.animate().setduration(4000); prop_anim_szoveg.animate().alpha(1); // Az előtűnés animáció paramétereinek beállítása és animálása Integer colorfrom = getresources().getcolor(r.color.feher); Integer colorto = getresources().getcolor(r.color.zold); final ValueAnimator coloranimation = ValueAnimator.ofObject(new ArgbEvaluator(), colorfrom, colorto); // A ValueAnimator osztállyal egy intervallumon belüli animáció határozható meg. Jelen esetben a kiinduló érték a fehér színtől, jutunk el a zöld színig. coloranimation.setduration(4000); // A színátmenet animáció beállításai coloranimation.addupdatelistener(new AnimatorUpdateListener(){ @Override public void onanimationupdate(valueanimator arg0) { 3 Android Developers - Property Animation - http://developer.android.com/guide/topics/graphics/prop-animation.html

17 // Az onanimationupdate() metódust hívja meg az animáció minden egyes frame-je. A paraméterként kapott ValueAnimator tartalmazza az animációhoz kiszámított aktuális értéket. }); prop_anim_szoveg.settextcolor( (Integer)arg0.getAnimatedValue()); } prop_anim_szoveg.setonclicklistener(new View.OnClickListener() { @Override public void onclick(view v) { // A színátmenet animáció indítása érintésre coloranimation.start(); } }); 5.6.4. Feladatok property animation-ra 1. Készítse el a korábban tárgyalt tweened animációk property animation megfelelőit! 2. Készítsen a property animation eszközeivel animációkat a felhasználói felület elemein, megváltoztatva azok egyes tulajdonságait! Változtassa meg színüket, méretüket, igazításukat, margóikat stb.! 3. Készítsen összetett animációkat a property animation eszközeinek segítségével!

6. Komponensek közötti kommunikáció 6.1. Activity-k 6.1.1. Példák Activity-k indítására Android alapú szoftverfejlesztés kezdőknek 18 6.1.1.1. Activity indítása Explicit Intent segítségével Intent tablet_hivas = new Intent(getApplicationContext(), TableActivity.class); // Activity indításához egy Intent-et hozunk létre, ahol megadjuk, hogy pontosan melyik Activity osztályát szeretnénk futtatni. // A getapplicationcontext() visszaad egy Context osztálybeli elemét, amely az aktuális alkalmazásunkat azonosítja startactivity(tablet_hivas); // Meghívjuk az Activity-t az Intent segíségével 6.1.1.2. Activity indítása Implicit Intent segítségével, visszatérési adatok kezelésével Intent fotokeszites=new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startactivityforresult(fotokeszites, 1); // Activity indítása visszatérési adat kérésével // A visszatérési adatokat az onactivityresult eseménykezelővel tudjuk kezelni @Override protected void onactivityresult(int requestcode, int resultcode, Intent data){ if(requestcode==1){ // Azonosítjuk, hogy ez a process küldte a kérést if(resultcode==result_ok){ // Rendben lefutott-e a hívott alkalamzás Bitmap ujkep=(bitmap) data.getextras().get("data"); // A visszaküldött adatok lekérse egy Bitmap objektumba ImageView kep=(imageview) this.findviewbyid(r.id.imageview_kep); kep.setimagebitmap(ujkep); } } }

19 6.1.1.3. Activity indítása Implicit Intent segítségével Uri telefonszam=uri.parse("tel:+36301234567"); Intent hivas=new Intent(Intent.ACTION_CALL,telefonszam); // Egy hívás kezdeményezés intent-et hozunk létre. Extra adatként egy telefonszámot adunk meg. Nem határozzuk meg pontosan, hogy milyen alkalmazás kezelje az intent-et. startactivity(hivas); 6.1.1.4. Activity indítása Explicit Intent segítségével, extra adatok átadásával Intent hivasextra=new Intent(); hivasextra.setaction(intent.action_send); hivasextra.setclassname("nyf.hu.animaciok", "nyf.hu.animaciok.animacioactivity"); // Pontosan meghatározzuk, hogy melyik alkalmazás melyik Activity-jét akarjuk elindítani hivasextra.putextra(intent.extra_text, "Ez az elküldött szöveg"); // Itt adjuk hozzá a plusz információt, ami jelen esetben egy egyszerű szöveg. hivasextra.settype("text/plain"); // Itt állítjuk be, hogy az átadott információnak milyen a típusa. Ez azért szükséges, mert egy intent-hez egyszerre több különböző típusú extra adat is csatolható. startactivity(hivasextra); 6.1.2. Feladatok Activity-k indításához 1. Készítsen olyan alkalmazást, amely ugyanannak az alkalmazásnak egy másik Activity-jét indítja el! 2. Készítsen olyan alkalmazást, amely már egy korábban megírt alkalmazást indít el! 3. Készítsen alkalmazást, amely szerkesztésre ad át adatokat más alkalmazásoknak! 4. Készítsen alkalmazást, amely elküld egy e-mail valakinek! 5. készítsen alkalmazást, amely egy képet küld át egyik alkalmazásból a másikba! 6.2. Alkalmazás felkészítése kérések kiszolgálására Intent Filter 6.2.1. Példa Intent Filter-re // Az alkalmazást a Manifest állományában kell felkészíteni kérések kiszolgálására

20 <intent-filter> <action android:name="android.intent.action.send"/> // Itt adjuk meg, hogy milyen esemény kiszolgálására szeretnénk felkészíteni az alkalmazásunkat. Jelen esetben ez a küldés esemény. <category android:name="android.intent.category.default"/> <data android:mimetype="text/plain" /> // Itt adjuk meg, hogy milyen típusú adatokat kaphat az esemény az intent-en keresztül. </intent-filter> 6.2.2. Feladatok Intent Filterek-hez 1. Készítsen olyan alkalmazásokat, amelyek képesek fogadni az előző feladatoknál megírt alkalmazások hívásait! 6.3. Broadcast események 6.3.1. Példa Broadcsat események hívására Intent bchivas=new Intent(); bchivas.setaction("nyf.hu.broadcastkuldo.bcuzenet"); // Itt állíthatjuk be a broadcast üzenet típusát bchivas.putextra("szoveg", "Ez lesz az elküldendő üzenet"); // Itt adunk hozzá extra adatokat sendbroadcast(bchivas); 6.3.2. Példa Broadcast esemény fogadására // A broadcast fogadásához szükségünk van a BroadcastReceiver osztály egy leszármazottjára, amely kezeli a beérkezett broadcast hívást public class BroadcastFogadoReceiver extends BroadcastReceiver{ @Override public void onreceive(context context, Intent intent) { String s=intent.getstringextra("szoveg"); // Itt kérjük le a megadott extra adatokat Intent hivas=new Intent(context,BroadcastFogadoActivity.class); hivas.addflags(intent.flag_activity_new_task); hivas.putextra(intent.extra_text, s); context.startactivity(hivas); // Itt egy alkalmazást hívunk meg, ha berkezett a megfelelő broadcast üzenet } }

21 // A Manifest állományban alkalmazásunkat fel kell készítenünk broadcast események fogadására. Így az alkalmazásunk akkor is tud broadcast üzenetet fogadni, ha éppen nem fut. <receiver android:name="broadcastfogadoreceiver"> // Itt adjuk meg, hogy mely receiver kezeli a beérkezett broadcast hívásokat. <intent-filter> <action android:name="nyf.hu.broadcastkuldo.bcuzenet"/> // Itt azonosítjuk, hogy milyen broadcast hívásokat kezeljen az alakalmazásunk </intent-filter> </receiver> // Alkalmazásunkat futás időben is felkészíthetjük broadcast üzenetek fogadására. Ekkor viszont csak a futási ideje alatt lesz kpes reagálni a beérkező broadcast hívásokra. IntentFilter szuro = new IntentFilter(Intent.ACTION_HEADSET_PLUG); // A fülhallgató, bedugásakor, vagy kihuzásakor keletkező broadcast üzenetekre készítjük fel az alkalmazásunkat. FulhallgatoReceiver rec=new FulhallgatoReceiver(); // Itt az alkalmazásunkhoz megírt receiver osztály egy példányát hozzuk létre a regisztráláshoz. this.registerreceiver(rec,szuro ); 6.3.3. Feladatok Broadcast eseményekhez 1. Készítsen olyan alkalmazást, amely futása alatt jelzi, ha a készüléket rácsatlakoztattuk vagy le csatlakoztattuk a töltőről. 2. Készítsen olyan alkalmazást, amely futása alatt jelzi, ha a készüléket képernyője ki-, vagy bekapcsolódott 3. Készítsünk olyan alkalmazást, amely egy másik, általunk írt alkalmazás broadcast hívását tudja fogadni!

7. Állománykezelés Android alapú szoftverfejlesztés kezdőknek 22 //Példa Shared preferences mentésre //Az alkalmazás elkészítésénél a Ment feliratú gombot nevok_b //néven érhetjük el, a Beolvas feliratút pedig visszanevok_b //néven. Kattintásra rendeljük hozzájuk az onclick() metódust, //ami majd leellenőrzi, hogy melyik gombot nyomtuk meg! public void onclick(view v) { if (v.getid() == R.id.nevOk_b) { //SharedPrefbe név mentése EditText nev_et = (EditText)findViewById(R.id.nev_et); SharedPreferences sharedpref = getsharedpreferences(getstring(r.string.preffile),context.mode_p RIVATE); SharedPreferences.Editor editor = sharedpref.edit(); editor.putstring(getstring(r.string.preffilekey), nev_et.gettext().tostring()); editor.commit();

23 Toast.makeText(this, "A sharedpref mentés sikeres", Toast.LENGTH_LONG).show(); } if (v.getid() == R.id.visszaNevOk_b) { TextView visszanev_tv = (TextView)findViewById(R.id.visszaNev_tv); try { SharedPreferences sharedpref = getsharedpreferences(getstring(r.string.preffile),context.mode_p RIVATE); visszanev_tv.settext(sharedpref.getstring(getstring(r.string.p reffilekey), "A preference nem található")); Toast.makeText(this, "A sharedpref visszatöltés sikerült", Toast.LENGTH_LONG).show(); } catch(classcastexception e) { Log.e(getString(R.string.app_name),"Van ilyen preference, de nem String típusú!"); } } } 7.1 Feladatok kulcs-érték párok tárolásához 1. Kérjük be a felhasználó nevét és életkorát! Mentsük el kulcsérték párban az adatokat! 2. Bővítsük az alkalmazást azzal, hogy indításkor, ha már léteznek a megfelelő kulcs-érték párok, beírja a korábbi adatokat a megfelelő widgetbe! 3. Bővítsük az alkalmazást úgy, hogy megadható legyen a mentéshez használt fájl neve is! 4. Készítsen programot, ami a belépéshez nevet és jelszót kér, ami az első futtatás alkalmával adható meg! 5. Készítsen programot, ami számolja, hányadik alkalommal indítjuk őt el! ListView A ListView egy olyan Layout, ami lehetővé teszi, hogy lapozható elemek egy csoportját megjeleníthessünk az Acticityn. A kilistázott elemek egy Adapteren keresztül gyűlnek össze, ehhez az adatok származhatnak tömbből vagy adatbázis-lekérésből. Az adatok bármilyen típusúak lehetnek. Minden ilyen elem egy konvertálásnak köszönhetően view-ként foglal helyet a listában.

24 ListView létrehozása az Activity xml-jében <ListView android:id="@+id/listview1" android:layout_width="match_parent" > </ListView> A mi ListView elemünk tehát listview1 néven érhető el majd a továbbiakban. Adapter létrehozása a forráskódban Az Adapter gondoskodik az adatok betáplálásáról a ListView elembe. Ez határozza meg a megjelenő elemeket a listában. Minden Adapter a BaseAdapter osztályból származik, de az Android biztosít néhány ismert típushoz külön is Adaptereket. Ilyen az ArrayAdapter, ami tömbök és listák adatait képes kezelni. A forráskód a ListView létrehozásához //Tömb létrehozása az elemekhez String napok[]= {"Hétfő","Kedd","Szerda","Csütörtök", "Péntek","Szombat","Vasárnap"}; //<String> típusú ArrayAdapter elkészítése //Paraméterei: //1. A jelenlegi kontextus //2. A nézet példányosításához használt file, ami tartalmazza a sorok layoutját, ebben az esetben egy előre definiált layout. //3. A TextView elem azonosítója, ahol az elem megjelenik //4. Az elemeket tartalmazó objektum, esetünkben a String típusú tömb. ArrayAdapter<String> napok_adapter = new ArrayAdapter<String> (this, android.r.layout.simple_list_item_1, android.r.id.text1, napok); //A listview1-et tegyük a forráskódból hivatkozhatóvá. ListView listview1 = (ListView)findViewById(R.id.listView1); //A listview1-hez rendeljük hozzá a létrehozott adaptert. listview1.setadapter(napok_adapter); Az Activity futás közben

25 7.2. Feladatok a belső tároló használatához 1. Írassuk ki az alkalmazásunk saját mappáját, majd hozzunk ott létre egy titkos nevű fájlt, amibe beírjuk egy EditText-ből a titkos telefonszámunkat! Ellenőrizzük le, látszik-e fájl külső fájlkezelő programokkal! 2. Készítsünk alkalmazást, ami Európa országainak a nevét egy belső fájlban tárolni tudja! Az országok nevét egy ListView-ban jelenítsük meg, a lista legyen bővíthető! 3. Készítsünk alkalmazást, ami egy belső tárolón lévő fájlba naplózza a saját megnyitásainak időpontját! 4. Listázzuk ki, milyen saját fájljai vannak az alkalmazásunknak! 5. A saját fájlok közül egy kiválasztottat törölje az alkalmazásunk a delete() metódus segítségével!

A fájlrendszer foglaltsági mutatóinak lekérdezése Android alapú szoftverfejlesztés kezdőknek 26 A StatFs osztály a Unixos statfs() wrapper osztálya. A segítségével lekérdezhetjük belső, vagy külső tárolóink foglaltságát, vagy szabad kapacitását. Hasznos metódusai: getblocksize(): a fájlrendszerben használt blokkok mérete bájtban getavailableblocks(): a fájlrendszer szabad, alkalmazások számára elérhető blokkjainak száma getblockcount(): az összes blokk száma a fájlrendszerben A lekérdezés menete: Hozzunk létre egy StatFs objektumot, amit belső tároló esetén az Environment.getRootDirectory().getAbsolutePath(), külső tárolónál pedig az Environment.getExternalStorageDirectory().getAbsolutePath() útvonallal konstruáljunk meg. Kérdezzük le az előző metódusok valamelyikével a kívánt információt. A getblocksize() metódussal átszámítható szükség szerint az eredmény bájtba. Az Activity xml fájlja tartalmazza a kiíráshoz szükséges elemeket <TextView android:id="@+id/teljes_belso_tv" android:text="@string/belso_tarolo" /> <TextView android:id="@+id/szabad_belso_tv" android:text="@string/szabad_belso_tarolo" /> <TextView android:id="@+id/teljes_kulso_tv" android:text="@string/kulso_tarolo" /> <TextView android:id="@+id/szabad_kulso_tv"

27 android:text="@string/szabad_kulso_tarolo" /> A forráskód TextView teljes_belso_tv = (TextView) findviewbyid (R.id.teljes_belso_tv); TextView szabad_belso_tv = (TextView) findviewbyid (R.id.szabad_belso_tv); TextView teljes_kulso_tv = (TextView) findviewbyid (R.id.teljes_kulso_tv); TextView szabad_kulso_tv = (TextView) findviewbyid (R.id.szabad_kulso_tv); //A belső fájlrendszer lekérdezése StatFs innerstatfs = new StatFs(Environment.getRootDirectory().getAbsolutePath()); //A fájlrendszer blokkmérete bájtban int blokksize = innerstatfs.getblocksize(); //A teljes kapacitás int teljes = (innerstatfs.getblockcount()*blokksize/1024/1024); //Kiíratás teljes_belso_tv.append(teljes+" MB"); //A programok számára felhasználható kapacitás int szabad = (innerstatfs.getavailableblocks()*blokksize/1024/1024); //Kiíratás szabad_belso_tv.append(szabad+" MB"); //A külső fájlrendszer lekérdezése StatFs externalstatfs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath ()); int extblokksize = externalstatfs.getblocksize(); int extteljes = (externalstatfs.getblockcount()* extblokksize/1024/1024); teljes_kulso_tv.append(extteljes+" MB"); int extszabad = (externalstatfs.getavailableblocks()* extblokksize/1024/1024); szabad_kulso_tv.append(extszabad+" MB");

28 Az emulátor nem dúskál a tárhelyben: 7.3. Feladatok külső tároló használatához 1. Készítsen alkalmazást, ami kiírja a külső tároló csatolási állapotát! 2. Készítsen alkalmazást, ami kiírja a belső és a külső tároló foglaltságának arányát százalékosan! 3. Készítsen alkalmazást, ami ListView-ba listázza a külső tároló gyökerének tartalmát! Rádiógombbal legyen választható, hogy csak a fájlokat, vagy csak a könyvtárakat látjuk! 4. Hány fotó készült az Android készüléken? Számoljuk meg, hány fájl található a DIRECTORY_DCIM könyvtárban! 5. Listázzuk ki a csengőhangok fájljait a DIRECTORY_RINGTONES mappából! A megfelelő útvonalat a getexternalfilesdir(), vagy a getexternalstoragepublicdirectory() szolgáltathatja számunkra.

8. Alkalmazások közzététele Android alapú szoftverfejlesztés kezdőknek 29 8.1 Tegyük elérhetővé az Android eszközödet a közvetlenül telepíthető alkalmazások számára! Telepítsen egy korábban elkészített programot közvetlenül ezek után! 8.2 Egy korábban készült alkalmazást tegyen közzé egy nyilvános weblapon, kiegészítve az elérést egy QR kóddal is! Az alkalmazás URL-jén kívül milyen egyéb típusú adatot adhatunk meg a segítségével?

30 8.3 Keressen és telepítsen fel egy (legális) piactér alkalmazást az eszközre a Google Play mellé! Miben tér el, mi a sajátossága a közismert Play-hez képest? 8.4 Hogyan kategorizálja a Google Play a letölthető alkalmazásokat! Minél több módot gyűjtsön össze! 8.5 Egy korábban készült alkalmazást készítsen elő közzétételre!

9. Összetett alkalmazások készítése Android alapú szoftverfejlesztés kezdőknek 31 1. Készítsünk Hangman játékot! Az alkalmazás az akasztófa építés egyes lépéseit képekként tárolja és jelenítse meg. Az alkalmazás a kitalálandó szavakat egy állományba tárolja. Alkalmazásunkat készítsük fel új kitalálandó szavak hozzáadására is. 2. Készítsen dobókockás játékot! A játék képernyőképe nagyjából az ábrán látható módon épüljön fel. A játék kezdetén a játékos 100 pénzegységgel indul. Minden dobás előtt a játékosnak lehetősége van a fennmaradó pénzéből tétet feltenni a következő dobás eredményére. A tét nagyságát a csúszka elemmel állíthatja be. A rádiógombok segítségével választhatja ki a játékos, hogy mely számra teszi fel a tétjét. A kocka érintésére történjen a dobás, amely legyen animálva. A játék addig folytatódjon, amíg a játékosnak el nem fogy az összes pénze. A legtöbb dobásig eljutó játékosok neveit tartsa számon a játék. 3. Készítsen szám kitalálós játékot! Az alkalmazás véletlenszám generálással válasszon ki egy számot 1-100 között. A játékos által megadott tippekre a válaszokat - A kitalálandó szám kisebb, A kitalálandó szám nagyobb az alkalmazás Toast elemek felhasználásával jelenítse meg. Az alkalmazás tárolja el a számot a legkevesebb tippelésből eltaláló használók nevét. 4. Tegyük lehetővé a gép tippelését is! Készítsünk kitalálós játékot, ahol a gép igyekszik megmondani, melyik számra gondoltunk! EditText-ekbe írjuk be, mettől meddig terjed az intervallum, amik között a felhasználó egy számra gondol! Ezt követően a gombokra kattintva segíthessük a gépet, hogy kisebb, nagyobb számra gondoltunk, vagy épp eltalálta a gép a számunkat! A program intervallumfelezéssel szűkítse a szóba jöhető számok körét! Amennyiben eltalálta a számot, jelenítsünk meg egy boldog arcot! Amennyiben már csak egy szám maradt és még mindig nem az Eltaláltad! gombra kattintunk, vágjon a program gyanakvó képet! 5. Készítsen egy alkalmazást, ami véletlenszerű mondatokat jelenít meg a képernyőn! A mondatok alanyból, állítmányból, minőségjelzőből és tárgyból álljanak. Az egyes mondatrészek

32 külön-külön fájlban legyenek tárolva, szöveges formában. A választás közülük véletlenül, a Random osztály segítségével történjen! Legyen lehetőség a mondatrészek változtatására, vagy bővítésére közvetlenül a programból! 6. Készítsünk egy olyan alkalmazást, amely az összes eddig általunk írt alkalmazást el tudja indítani!