ANDROID ALKALMAZÁSFEJLESZTÉS

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

ANDROID ALKALMAZÁSFEJLESZTÉS

Broadcast Service Widget

ANDROID ALKALMAZÁSFEJLESZTÉS

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

Alap számológép alkalmazás

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

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

Mobil Informatikai Rendszerek

Mobil Informatikai Rendszerek

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

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


Mobil Informatikai Rendszerek

ANDROID ALKALMAZÁSFEJLESZTÉS

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?

ANDROID ALKALMAZÁSFEJLESZTÉS

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

Programozási nyelvek Java

Mobil Informatikai Rendszerek

Algoritmusok és adatszerkezetek II.

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

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

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

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

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

ANDROID ALKALMAZÁSFEJLESZTÉS

Java Programozás 11. Ea: MVC modell

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:

Google Maps V2. OpenStreetMap, Mapsforge

ANDROID ALKALMAZÁSFEJLESZTÉ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

Programozási nyelvek Java

Programozási nyelvek Java

Szoftvertechnológia alapjai Java előadások

libgdx alapok, első alkalmazás

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

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

ZH mintapélda. Feladat. Felület

Bevezető. Servlet alapgondolatok

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

Adattárolás Szenzorok

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

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

JAVA PROGRAMOZÁS 3.ELŐADÁS

3. Gyakorlat Ismerkedés a Java nyelvvel

Konkurens TCP Szerver

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

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

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

Osztályok. 4. gyakorlat

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

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

Programozási nyelvek Java

és az instanceof operátor

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

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

Java és web programozás

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

JAVA PROGRAMOZÁS 2.ELŐADÁS

Android 5.0.

Mobil Informatikai Rendszerek

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

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

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

Segédanyag: Java alkalmazások gyakorlat

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

3. Egyszerű komponensek

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

Enterprise JavaBeans 1.4 platform (EJB 2.0)

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

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

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

Szoftvertechnológia alapjai Java előadások

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

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

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

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

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

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

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

Informatika terméktervezőknek

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

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

Java és web programozás

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Programozás I. Első ZH segédlet

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

Segédanyag: Java alkalmazások gyakorlat

Programozás C++ -ban 2007/4

Adatbázisok webalkalmazásokban

ANDROID ALKALMAZÁS FEJLESZTÉS

Stack Vezérlés szerkezet Adat 2.

Elemi Alkalmazások Fejlesztése II.

Átírás:

ANDROID ALKALMAZÁSFEJLESZTÉS Android komponensek használata Activity Fragment Service Broadcast Recevier Runtime permissions sicz- m e s z i a r. j a n o s @ n i k. u n i - o b u d a. h u Sicz-Mesziár János 2017. március 1.

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

Application 3 Az alkalmazást írja le, mely az alábbi főbb komponenseket tartalmazhatja: Activity Service Broadcast Receiver 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

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)

Fragments

14 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) { 15 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 16 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 17 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 19

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){ 20 // 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 );