ANDROID ALKALMAZÁSFEJLESZTÉS

Hasonló dokumentumok
ANDROID ALKALMAZÁSFEJLESZTÉS

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

Broadcast Service Widget

ANDROID ALKALMAZÁSFEJLESZTÉS

Újdonságok a Google műhelyéből. Péter Ekler

Android Wear programozás. Nyitrai István

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

I. 288.: Utcai WiFi térkép

ANDROID ALKALMAZÁSFEJLESZTÉS

ANDROID ALKALMAZÁSFEJLESZTÉS

Mobil Informatikai Rendszerek

Alap számológép alkalmazás

Mobil Informatikai Rendszerek

Mobil Informatikai Rendszerek

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

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o


Mobil Informatikai Rendszerek

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

ANDROID ALKALMAZÁSFEJLESZTÉS

Google Maps használata OSM, mint alternatív térkép

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Szoftvertechnológia alapjai Java előadások

ANDROID ALKALMAZÁSFEJLESZTÉS

ANDROID ALKALMAZÁSFEJLESZTÉS

Java Programozás 11. Ea: MVC modell

ZH mintapélda. Feladat. Felület

Algoritmusok és adatszerkezetek II.

Programozási nyelvek Java

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

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

Mobil Informatikai Rendszerek

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Google Maps V2. OpenStreetMap, Mapsforge

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Adattárolás Szenzorok

strings.xml res/values/strings.xml fájlban hozzuk létre a hiányzó string adatforrásainkat A jelenlegi helyett ez álljon: <resources> <string

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

ANDROID ALKALMAZÁS FEJLESZTÉS

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

RIA Rich Internet Application

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

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

JAVA PROGRAMOZÁS 3.ELŐADÁS

Programozási nyelvek Java

Programozási nyelvek Java

libgdx alapok, első alkalmazás

Osztályok. 4. gyakorlat

Konkurens TCP Szerver

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

JAVA webes alkalmazások

Abstract osztályok és interface-ek. 7-dik gyakorlat

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

Bevezető. Servlet alapgondolatok

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

Android 5.0.

C#, OOP. Osztályok tervezése C#-ban

Optimalizálás Hatékony alkalmazás Androidra

Access adatbázis elérése OLE DB-n keresztül

Java és web programozás

OOP: Java 8.Gy: Abstract osztályok, interfészek

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

JAVA PROGRAMOZÁS 2.ELŐADÁS

3. Gyakorlat Ismerkedés a Java nyelvvel

Excel ODBC-ADO API. Tevékenységpontok: - DBMS telepítés. - ODBC driver telepítése. - DSN létrehozatala. -Excel-ben ADO bevonása

Java programozási nyelv 5. rész Osztályok III.

Programozási nyelvek Java

és az instanceof operátor

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Java programozási nyelv 4. rész Osztályok II.

C# osztályok. Krizsán Zoltán

3. Egyszerű komponensek

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Szenzorok megismerése Érzékelők használata

Szoftverfejlesztés a Google Android OS-re (Android 3.0, API level 11)

Selling Platform Telepítési útmutató Gyakori hibák és megoldások

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Szálkezelés Rajzolás képernyőre Bevitel kezelése - Érintő képernyő - Billentyűzet

Android fejlesztés Alapok. Készítette: Kálmán Kornél (KAKQAAT.SZE)

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET)

Szálkezelés Rajzolás képernyőre Bevitel kezelése - Érintő képernyő - Billentyűzet

Operációs rendszerek. Az NT folyamatok kezelése

Segédanyag: Java alkalmazások gyakorlat

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET) Cserép Máté.

Private Cloud architektúra keretrendszer

Delegátumok C#-ban Krizsán Zoltán iit

Java és web programozás

Az új be- és kimenet könyvtár

Szoftvertechnológia alapjai Java előadások

Adatbázis-kezelés ODBC driverrel

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

Biztonságos mobilalkalmazás-fejlesztés a gyakorlatban. A CryptTalk fejlesztése során alkalmazott módszerek. Dr. Barabás Péter Arenim Technologies

Grafikus felhasználói felületek. Abstract Window Toolkit, a java.awt és java.awt.event csomagok

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Átírás:

ANDROID ALKALMAZÁSFEJLESZTÉS Activity Fragment Service Broadcast Recevier Architect Components Runtime permissions Sicz-Mesziár János sicz- mesziar.janos @ nik.uni - obuda.hu Mezei József m e z e i. j o z s e f @ n i k. u n i - o b u d a. h u 2017. október 3.

Overview 2 Application Activity Activity 2 Activity 3 Fragment Fragm ent Fragment Fragment Fragment Service Broadcast Receiver Broadcast Receiver Broadcast Receiver

AndroidManifest: Application Az alábbi főbb komponenseket foglalja magába: Activity Service Broadcast Receiver 3 Fontosabb paraméterek: Icon az alkalmazás ikonja, ez jelenik meg a Launcher-en is Label az alkalmazás neve HardwareAccelerated hardveres gyorsítás engedélyezése Theme az alkalmazásra kiterjedő stílus Large heap alkalmazás által használható maximális memóriaméret ideiglenes megemelése ha szükséges további paraméterek

AndroidManifest: Activity 4 Leírja, hogy hogyan működjön egy felhasználói felület, azaz ez tölti be a kontroller szerepét. Saját életciklusa van. Fontosabb működést befolyásoló paraméterek: icon az adott activity ikonja, például a recent apps -ban ez látszik label adott activity megnevezése hardwareaccelerated hardveres gyorsítás engedélyezése activity-n belül screenorientation portrai, landscape, reverselandscape, sensor, configchanges fejlesztő kezel bizonyos változásokat: orientation, screensize launchmode activity példány működés windowsoftinputmode billentyűzet beállítások theme Activity-re alkalmazott stílus fájl, például nowindowtitle exported Activity elindítható third-party applikáció által is

Új Activity indítása 5 Új Activity hozzáadása: [package] > jobb klikk > New > Activity Új Activity hozzáadása kézzel: Layout XML res/layout/uj_activity.xml Activity leszármaztatása src/[package]/ujactivity.java AndroidManifest.xml-ben felvenni Új Activity indítása Intent masikactivity = new Intent(this, Masik.class); startactivity(masikactivity);

Paraméterek átadása 6 Primitívek átadása Activity-nek Intent masikactivity = new Intent(this, Masik.class); masikactivity.putextra("szam", 100); masikactivity.putextra("key", "érték"); startactivity(masikactivity); Primitívek integer, double, float, string, boolean, byte, short, char Átadott paraméterek elérése protected void oncreate(bundle savedinstancestate){ super.oncreate(savedinstancestate); int szam = getintent().getextras().getint("szam", 0); String kulcs = getintent().getextras().getstring("key", null);

Paraméterek átadása (2) Parcelable 7 public class MyModel implements Parcelable { private String name; private int value; public MyModel(String name, int value) { Összetett objektum átadása paraméterként. public MyModel(Parcel parcel){ this.name = parcel.readstring(); this.value = parcel.readint(); public void writetoparcel(parcel parcel, int i) { parcel.writestring(name); parcel.writeint(value); public static final Creator<MyModel> CREATOR = new Creator<MyModel>() { public MyModel createfromparcel(parcel parcel) { return new MyModel(parcel); ;

Paraméterek átadása (2) Visszatérés 8 Activity indítása visszatérési értékre várva Context.startActivityForResult(Intent i, int requestcode); Visszatérési érték meghatározása setresult(result_ok, new Intent()); Visszatérési érték levétele public class MainActivity extends Activity { protected void onactivityresult(int requestcode, int resultcode, Intent data) { data.getintextra("kulcs", -1); super.onactivityresult(requestcode, resultcode, data);

Service 9 Egy alkalmazás komponens: hosszan futó műveletek végrehajtása háttérben fut, nincs UI Két formája van: Started Nem külön szálon fut! Nem egy külön folyamat! egy komponens (pl.: Activity) elindítja a startservice() eljárással Végtelenségig fut, akkor is ha az őt elindító komponens megsemmisül. (Nincs visszatérési érték) stopservice() Általában egy műveletet hajt végre, majd megsemmisíti magát. Pl.: letöltés / feltöltés az internet irányába Bound Egy komponens bindservice()-al kötődik Kliens-szerver felület a komponens és service között (request, results, ) Addig fut amíg az összeköttetés él. (Pl.: zenelejátszás)

Service (2) 10 startservice() bindservice() stopself() stopservice() unbindservice() Clean up:threads, listeners, receivers

Broadcast Receiver 11 Aszinkron, üzenetszórásos értesítés, azok akik felregisztráltak rá értesülnek róla Két fő csoport: Normal broadcast teljesen aszinkron, véletlen sorrend Hatékonyabb, de korlátok: nincs visszatérési érték, visszavonás Ordered broadcast egyszerre csak egy receiver fut visszavonható abort Prioritásokat adhatunk (android:priority) onreceive() csak egyszer fut le - rövid életű Hosszan futó műveletekre alkalmatlan (timeout ~10sec)

Broadcast Receiver a gyakorlatban 12 Regisztrálás statikusan BroadcastReceiver osztály implementálása AndroidManifest.xml-ben <receiver> megadása Regisztrálás dinamikusan, futási időben BroadcastReceiver osztály implementálása Context.registerReceiver()-el regisztálunk onresume() Context.unregisterReceiver() leiratkozunk onpause() private BroadcastReceiver mbatinforeceiver = new BroadcastReceiver(){ public void onreceive(context context, Intent intent){ int level = intent.getintextra("level",0); contenttxt.settext("" + level + %"); ; Broadcast kibocsátás Context.sendBroadcast(Intent intent)

Architecture Components 13 2017 őszétől: Android Oreo újítása, visszafele kompatibilis verzió függetlenül LifeCycle: "Életciklus-biztos" komponens memory leaks és alkalmazás összeomlások elkerülése céljából LiveData: "Életciklus-biztos" komponens figyeli egy adat megváltozását, ha változik az adat a UI komponens is frissül ViewModel: Felhasználói felülettel kapcsolatos adattárolás és menedzselés, konfiguráció változáskor adatörzés, pl rotation Room: absztrakciós réteg az SQLite felett, boilerplate code elkerülése, biztonságos adathozzáférés Paging Library: adatok szakaszos betöltése, memóriát akkor pakoljuk tele ha igény is van az adatra, adatok lapozott betöltése, például RecycleView scrollozásakor

Fragments

15 Activity moduláris része, saját életciklussal: Ha egy Activity pause állapotba kerül akkor az összes benne lévő Fragment is! Függetlenül manipulálható: futás időben hozzáadható, elvehető, back stack -be tehető. Layout-on bárhol elhelyezhető. Lásd Google IO 2012 App demo Android 3.0 (API level 11) óta érhető el Android 1.6-tól is használható Support Library segítségével.

Fragment a gyakorlatban public class MyListFragment extends Fragment { public View oncreateview( LayoutInflater inflater, ViewGroup container, Bundle savedinstancestate) { 16 View v = inflater.inflate( R.layout.list_fragment, container, false); return v; Fragment kinézetét leíró XML

Fragment betöltése Fragment betöltése futás időben 17 private void loadfragment(){ FragmentManager fm = getsupportfragmentmanager(); FragmentTransaction ft = fm.begintransaction(); ft.settransition(fragmenttransaction.transit_fragment_fade); ft.addtobackstack(mylistfragment.class.getname()); ft.replace(r.id.container_place, new MyListFragment()); // ft.add(r.id.container_place, new MyListFragment()); // ft.remove(fragment ); // ft.hide(fragment ); ft.commit();

Backstack 18 Hasonló az alkalmazás stack-hez Fragment váltások előzményeit tartalmazza Vissza gomb (back) esetén automatikusan betölti az előző fragmentet Ennek állapota lekérdezhető: getbackstackentryat(int index) getbackstackentrycount() popbackstack() addonbackstackchangedlistener( OnBackStackChangedListener listener)

Runtime Permissions 6.0+

Runtime permissions Mi változott? Az Android 6.0-tól kezdve futás időben dönt a felhasználó a hozzáférésről Telepítésnél már nem kell beleegyeznie a jogosultság kérésekbe Visszavonható targetapilevel: 23+ Két kategória: Normal Dangerous Support library segít a kezelésben 20

Használata // Hozzáférés meglétének ellenőrzése int permissioncheck = ContextCompat.checkSelfPermission( thisactivity, Manifest.permission.WRITE_CALENDAR ); // Hozzáférés igénylése if(permissioncheck!= PackageManager.PERMISSION_GRANTED){ 21 // Opcionális: igényel-e magyarázatot --> dangerous if (ActivityCompat.shouldShowRequestPermissionRationale( thisactivity, Manifest.permission.WRITE_CALENDAR )) { // Igényel hozzáférés elmagyarázása a felhasználónak. // Aszinkron, válasz esetén újra kell futtatni ezt a kódot! else { // Kérés benyújtása ActivityCompat.requestPermissions( thisactivity, new String[]{Manifest.permission.WRITE_CALENDAR, MY_PERMISSIONS_REQUEST_WRITE_CONTACTS // valamilyen szám );